0

Grand Central Dispatchのドキュメントを読んでいましたが、とという2つの関数がBlock_copyありBlock_releaseます。ドキュメントによると、これらのメソッドはdispatch_async、ブロックのメモリ管理を処理するために呼び出し中に使用されています。私のコードでも同じことをすることになっていますか?

以下の私のコードに問題がありますか?

typedef void (^MyCompletionHandler)(NSError *error)

@interface ServiceClient

- (void)fetchWithCompletionHandler:(MyCompletionHandler)completionHandler;

@property (nonatomic, assign) MyCompletionHandler completionHandler;

@end

@implementation ServiceClient
@synthesize completionHandler = _completionHandler;

- (void)fetchWithCompletionHandler:(MyCompletionHandler)completionHandler 
{
   self.completionHandler = completionHandler;
   [self performSelectorInBackground:@selector(fetchInBackground)];
}

@end
4

2 に答える 2

2

次の宣言を使用する必要があります。

@property (nonatomic, copy) MyCompletionHandler completionHandler;

assignブロックは保持されませんが、自動的にcopy実行Block_copyされます。

于 2012-07-02T16:11:03.027 に答える
2

ブロックを変数に割り当てるときは、ブロックをコピーする必要があります。この場合、completionHandlerプロパティを変更して属性を設定するか、前述のようにブロックを割り当てるときに(nonatomic, copy)使用できます。Block_copy

于 2012-07-02T16:12:32.780 に答える