Вопрос

У меня есть класс, который содержит блок как свойство объекта:

@property (nonatomic, readwrite, copy) SFFailureBlock failureBlock;
.

Где sffailureblock:

typedef void (^SFFailureBlock)(NSError *error);
.

У меня есть операция также объявлена как свойство объекта (AFHTTTPRECESTOPERATION), и я хочу, чтобы он позвонил блоку сбоя после того, как он будет завершен.

    [self.operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    __weak NSError *error = [NSError errorWithDomain:@"com.test" code:100 userInfo:@{@"description": @"zero results"}];
    failureBlock(error);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"nothing");
}];
.

Я получаю компилятор Предупреждение «Захват« Self »сильно в этом блоке, вероятно, приведет к сохранению цикла«.Я искал Интернет, но не смог найти приличное решение о том, почему это приводит к сохранению цикла.Я не называю «я» внутри блока в любом месте.

Другая странная вещь - это то, что если я напишу «Self.failureBlock (ошибка)» компилятор не дает мне никакого предупреждения!

Может кто-нибудь объяснить мне, что происходит?Я должен серьезно пропустить что-то в правилах управления дугами, но я не могу понять это.

Это было полезно?

Решение

Когда вы ссылаетесь на «Постоянный пункт» в блоке операции, вы действительно делаете «Self-> ShifeBlock» - так что оно неявно сохраняет себя.То, что вы можете сделать, это создать автоматическую переменную SFFAILUREBLOCK XFailureBlock= сбое;Выше самообеспечения, затем используйте его в блоке.[Опять же, вы хотите избежать каких-либо> ссылок внутри этого блока.]

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top