self.operationQueue = [[NSOperationQueue alloc] init];
[self.operationQueue addOperationWithBlock:^{
[self doSomethingElse];
}];
- (void)doSomethingElse {
[self doAnother];
}
これにより、保持サイクルが作成されますか?操作キューへの参照は保持しますが、操作は保持しません。考え?
self.operationQueue = [[NSOperationQueue alloc] init];
[self.operationQueue addOperationWithBlock:^{
[self doSomethingElse];
}];
- (void)doSomethingElse {
[self doAnother];
}
これにより、保持サイクルが作成されますか?操作キューへの参照は保持しますが、操作は保持しません。考え?
これにより、保持サイクルが発生する可能性があります。自己への弱いポインタを作成し、それを使用します。
_weak MyObject *weakSelf = self;
編集:
あなたのブロックで、自分自身への強い参照を作成します。ポインターを評価して、ポインターが有効であり、安全であることを確認します。スニペット(次に説明した内容に基づく)は、次のようになります。
self.opeartionQueue = [[NSOperationQueue alloc] init];
_weak MyObject *weakSelf = self;
[[self operationQueue] addOperationBlock:^{
_strong MyObject *strongSelf = weakSelf; // Obtain a strong reference so our pointer won't dangle out from under us...
if(strongSelf) // Make sure it's valid
{
[strongSelf doSomethingElse]; // Do your work
}
}