self
Objective-C スタイルのブロックで ARC の下への強い参照をキャプチャする場合は、__weak
ポインタを使用して ARC の「保持サイクル」の問題を回避する必要があります。
// Right way:
- (void)configureBlock {
XYZBlockKeeper * __weak weakSelf = self;
self.block = ^{
[weakSelf doSomething]; // capture the weak reference
// to avoid the reference cycle
}
}
保持サイクルが何であるかは本当にわかりませんが、この回答はそれを少し説明しています。__weak
Objective-C スタイルのブロックにはポインターを使用する必要があることはわかっています。自己をキャプチャするときに強い参照サイクルを回避するを参照してください。
しかし、私の質問は、self
C++<functional>
ブロックの下でキャプチャするときに弱いポインターを作成する必要があるかということです。
- (void)configureBlock {
self.block = [self](){
[self doSomething]; // is this ok? It's not an objective C block.
}
}