2016-10-29 8 views
0

を保持し、私は、デリゲートによってエンキュー等見えるさNSOperationサブクラスを有しますNSOperationオブジェクトの割り当てが解除されている可能性が高い場合は、[要素]]が呼び出されます。この操作をキューに追加する前に、デリゲートに「要素」を保持する必要がありますか?要素オブジェクトはアプリの他の場所に保持されますが、そこから解放される可能性があります。私は、代理人がそれをNSOperationから受け取ったときに、それが依然として有効なオブジェクトであることを確認する必要があります。dispatch_asyncと(非ARC)非ARCアプリで

dispatch_asyncでそれを呼び出す行為が、渡された引数を保持するかどうかは疑問です。私はもちろん、NSInvocationとperformSelectorOnMainThreadを使用してそれを保持することができます。

+0

申し訳ありません - 自己がinitから返されています。私はそれを私の質問に追加しませんでしたが、それは元のコードにあります。 – Trygve

+0

ジョシュは正しいです(下記参照)。 [Objective-Cブロック](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Blocks/Articles/bxVariables.html#//apple_ref/doc/uid/TP40007502-CH6-SW4)を参照してください。 _Blocksプログラミングトピック:ブロックと変数._ – Rob

答えて

5

キューはキューに入れられたときにブロックを保持し、ブロックはキャプチャしたオブジェクトを保持します(selfなど)。 selfはここではelementを強く参照しているため、少なくともブロックが実行されるまでelementが有効になります。

オブジェクトがデリゲートへの強い参照を持っていることは珍しいことです。そこには途切れのない保持サイクルがないことを確認してください。

関連する問題