Tengo una propiedad de sólo lectura isFinished
en mi archivo de interfaz:Asignación a Ivar en un bloque a través de puntero débil
typedef void (^MyFinishedBlock)(BOOL success, NSError *e);
@interface TMSyncBase : NSObject {
BOOL isFinished_;
}
@property (nonatomic, readonly) BOOL isFinished;
y quiero ponerlo en YES
en un bloque en algún momento posterior, sin crear un ciclo de retener a self
:
- (void)doSomethingWithFinishedBlock:(MyFinishedBlock)theFinishedBlock {
__weak MyClass *weakSelf = self;
MyFinishedBlock finishedBlockWrapper = ^(BOOL success, NSError *e) {
[weakSelf willChangeValueForKey:@"isFinished"];
weakSelf -> isFinished_ = YES;
[weakSelf didChangeValueForKey:@"isFinished"];
theFinishedBlock(success, e);
};
self.finishedBlock = finishedBlockWrapper; // finishedBlock is a class ext. property
}
estoy seguro de que esta es la forma correcta de hacerlo. ¿Este código se fugará, o se romperá, o está bien? Tal vez hay una manera más fácil que he pasado por alto?
lo digo, se puede usar '__weak typeof (auto) * = weakSelf auto;' –
fresco, eso es útil! – manmal
Pequeña corrección de la declaración general '__weak typeof (self) weakSelf = self;' typeof (self) ya es un puntero. – allprog