1
self.operationQueue = [[NSOperationQueue alloc] init];
[self.operationQueue addOperationWithBlock:^{
    [self doSomethingElse];        
}];

- (void)doSomethingElse {
    [self doAnother];
}

これにより、保持サイクルが作成されますか?操作キューへの参照は保持しますが、操作は保持しません。考え?

4

1 に答える 1

0

これにより、保持サイクルが発生する可能性があります。自己への弱いポインタを作成し、それを使用します。

_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
    }
}
于 2012-09-14T17:22:55.567 に答える