2015-09-16 6 views
-1

Вот код из урока Рэя о ReactiveCocoa, и я не могу понять, как получилось, что он имеет цикл сохранения, может ли кто-нибудь это указать?Почему у этого есть цикл сохранения здесь?

- (RACSignal *)signalForSearchWithText:(NSString *)text { 

    // 1 - define the errors 
    NSError *noAccountsError = [NSError errorWithDomain:RWTwitterInstantDomain 
                code:RWTwitterInstantErrorNoTwitterAccounts 
               userInfo:nil]; 

    NSError *invalidResponseError = [NSError errorWithDomain:RWTwitterInstantDomain 
                 code:RWTwitterInstantErrorInvalidResponse 
                userInfo:nil]; 

    // 2 - create the signal block 
    @weakify(self) 
    return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { 
     @strongify(self); 
     // 3 - create the request 
     SLRequest *request = [self requestforTwitterSearchWithText:text]; 

     // 4 - supply a twitter account 
     NSArray *twitterAccounts = [self.accountStore 
            accountsWithAccountType:self.twitterAccountType]; 
     if (twitterAccounts.count == 0) { 
      [subscriber sendError:noAccountsError]; 
     } else { 
      [request setAccount:[twitterAccounts lastObject]]; 

      // 5 - perform the request 
      [request performRequestWithHandler: ^(NSData *responseData, 
                NSHTTPURLResponse *urlResponse, NSError *error) { 
       if (urlResponse.statusCode == 200) { 

        // 6 - on success, parse the response 
        NSDictionary *timelineData = 
        [NSJSONSerialization JSONObjectWithData:responseData 
                options:NSJSONReadingAllowFragments 
                 error:nil]; 
        [subscriber sendNext:timelineData]; 
        [subscriber sendCompleted]; 
       } 
       else { 
        // 7 - send an error on failure 
        [subscriber sendError:invalidResponseError]; 
       } 
      }]; 
     } 

     return nil; 
    }]; 
} 

Потому что я пытаюсь удалить @weakify(self) и @stringify(self)

+0

Я считаю, что 'noAccountsError' и' invalidResponseError' сохранены –

+0

Как получилось? Я не вижу ссылок на циркуляр. Вы можете объяснить? @GaneshSomani –

+0

Можете ли вы предоставить мне ссылку на то, что вы здесь имеете в виду? –

ответ

-1

В блоке, у не должны использовать себя непосредственно. self хранит экземпляр блока, и блок держится сам. U может использовать слабый «я» в блоке, чтобы избежать цикла сохранения.

+0

Я спрашиваю, какие две вещи имеют цикл сохранения. Не почему. –

0

В этом коде нет очевидного цикла удержания. Вы должны быть в состоянии удалить @weakify/@strongify обычаев без проблем.

+0

Думаю, что так. Но я не знаю, почему они это добавили. Это будет путать учащихся. –

+0

В учебнике, с которым вы связались, я не видел этот код. Можете быть более конкретными? – erikprice