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
}
これが正しい方法かどうかはわかりません。このコードは漏れたり壊れたりしますか? それとも問題ありませんか? おそらく私が見落としていたより簡単な方法がありますか?