1

私はこのコードを持っていますが、それを並行して実行したいいくつかのタスクがあります。問題は、ディスパッチが処理できるようになる前に、実行ループごとにムービーオブジェクトが解放されることです。これを ARC に保持する方法はありますか? 現在、ほとんどのロジックをディスパッチの外側で処理し、__block で渡していますが、時間がかかるプロセスであり、ディスパッチ ブロックで処理したい場合はどうすればよいですか?

for (HTMLNode *movie in movieContainer) {
  dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// time consuming process on movie object
});

dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
   // combine the results
});
4

3 に答える 3

3

ほとんどの場合、そうする必要はありません。ブロックは、デフォルトで使用されるすべての変数を自動的にキャプチャしますが、高速反復を使用する場合は例外があります。

高速反復では__unsafe_unretained、(速度のために)強力なポインターではなく生のポインターを使用するため、このシナリオでは、反復変数を強力で修飾することができます。

for (HTMLNode __strong *movie in movieContainer) {
  dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// time consuming process on movie object
});
于 2012-06-27T13:58:45.140 に答える
0

キーワードでローカル変数を作成し__strong、ムービー オブジェクトに影響を与えます。次に、dispatch_async 呼び出しでこの強力なローカル変数を使用します。

于 2012-06-27T13:52:49.023 に答える
-1

手動保持リリース

#import <objc/runtime.h>
id objc_retain(id);
void objc_release(id);

objc_retain(object);
objc_release(object);

また

変数

__strong
于 2012-06-27T13:54:56.433 に答える