0

我正在阅读有关 Grand Central Dispatch 的文档,其中有两个函数称为Block_copyBlock_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

您应该在将块分配给变量时复制它们——在这种情况下,您可以将completionHandler属性更改为具有(nonatomic, copy)属性,或者Block_copy在分配块时使用,就像您说的那样。

于 2012-07-02T16:12:32.780 回答
2

您应该使用以下声明:

@property (nonatomic, copy) MyCompletionHandler completionHandler;

随着assign你的块不会被保留,但copyBlock_copy自动执行。

于 2012-07-02T16:11:03.027 回答