Присвоение ivar в блоке через слабый указатель

У меня есть свойство isFinishedтолько для чтения -в моем интерфейсном файле :

typedef void (^MyFinishedBlock)(BOOL success, NSError *e);

@interface TMSyncBase : NSObject {
     BOOL isFinished_;
}

@property (nonatomic, readonly) BOOL isFinished;

. и я хочу установить его на YESв блоке в какой-то момент позже, не создавая цикл сохранения на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
}

Я не уверен, что это правильный способ сделать это. Будет ли этот код протекать или ломаться, или все в порядке? Возможно, есть более простой способ, который я упустил из виду?

7
задан Josh Caswell 12 February 2013 в 00:41
поделиться