Ist es in Ordnung, auf eine Delegateneigenschaft von einem Block aus zuzugreifen?
@interface TheObject : NSObject
...
@property (nonatomic, assign) id<SomeDelegate> delegate;
@synthesize delegate
- (void) someMethod {
[someObject doSomethingWithCompletionHandler:^(NSArray *)someArray {
[self.delegate otherMethod:someArray];
}];
}
Was passiert, wenn der Delegat gelöscht wird (von der dealloc-Methode in dem Objekt, das auch den Delegaten festgelegt hat), bevor der Abschluss-Handler aufgerufen wird? Könnte es ein Speicherfehler sein? Ich weiß nicht, wie man __block
für Immobilien...
Antwort von unten:
Wenn der Delegat von dem Objekt, das beim Dealloc-Aufruf der Delegat ist, abgetrennt wird, ist alles in Ordnung.
@property (nonatomic, retain) TheObject theObject;
@synthezise theObject = _theObject;
- (void) thatMethod {
self.theObject = [[TheObject alloc] init] autorelease];
_theObject.delegate = self;
}
- (void) dealloc {
_theObject.delegate = nil;
self.theObject = nil;
}