Sono sorpreso di trovare il seguente comportamento ...I blocchi mantengono il ciclo dalla convenzione di denominazione?
@interface Foo : NSObject
- (void)addBar:(id)aBar withCompletion:(void(^)(void))completion;
@end
@interface AwesomeClass : NSObject
@property (strong, nonatomic) Foo *foo;
- (void)doSomethingWithBar:(id)bar;
@end
@implementation AwesomeClass
- (void)doSomethingWithBar:(id)bar
{
[self.foo addBar:bar withCompletion:^{
NSLog(@"%@", self.foo);
}];
}
In Xcode 4.6.1 Ho ricevuto un avviso nella realizzazione di -doSomethingWithBar:
che "Capturing 'sé' fortemente in questo blocco rischia di portare ad una mantenere il ciclo. "
Tuttavia, se il refactoring nome del metodo -addBar:withCompletion:
--setupBar:withCompletion:
questo avvertimento va via. Sembra che la mia sorpresa da questo illustra che ho una lacuna nelle mie conoscenze riguardanti le convenzioni di denominazione Objective-C!
Prova a ricompilare. L'avvertimento non sta "andando via", tanto quanto Xcode è stato idiota e scarica gli avvertimenti LLVM ha generato l'ultima volta – CodaFi