ARC com blocos e reter ciclos
Eu tenho uma classe que contém um bloco como uma propriedade de objeto:
@property (nonatomic, readwrite, copy) SFFailureBlock failureBlock;
onde SFFailureBlock:
typedef void (^SFFailureBlock)(NSError *error);
Eu tenho uma operação também declarada como uma propriedade de objeto (AFHTTPRequestOperation) e eu quero chamar o bloco de falha assim que for concluído.
[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");
}];
Eu recebo um aviso de compilador "Capturar 'auto' fortemente neste bloco provavelmente levará a um ciclo de retenção". Eu pesquisei na internet, mas não consegui encontrar uma solução decente a respeito de por que isso leva a um ciclo de retenção. Eu não estou chamando 'eu' dentro do bloco em qualquer lugar.
Outra coisa estranha é que, se eu escrever 'self.failureBlock (error)', o compilador não me dará nenhum aviso!
Alguém pode me explicar o que está acontecendo? Eu devo estar seriamente perdendo alguma coisa nas regras de gerenciamento de memória do ARC, mas não consigo entender.