I have a class which holds a block as an object property:
@property (nonatomic, readwrite, copy) SFFailureBlock failureBlock;
where SFFailureBlock:
typedef void (^SFFailureBlock)(NSError *error);
I have an operation also declared as an object property (AFHTTPRequestOperation) and I want it to call the failure block once it is completed.
[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");
}];
I get a compiler warning "Capturing 'self' strongly in this block is likely to lead to a retain cycle". I have searched the internet but I couldn't find a decent solution as to why this leads to a retain cycle. I am not calling 'self' inside the block anywhere.
Another strange thing is that if I write 'self.failureBlock(error)' the compiler does not give me any warning!
Can anyone explain to me what is going on? I must be seriously missing something in ARC memory management rules, but I can't figure it out.