我在引用代码块内部的“NSBlockOperation”时遇到了麻烦。我需要检查操作是否被取消,当在一个启用了ARC的项目中运行时,似乎对“searchOperation”的任何访问都会泄漏。
这段代码基本上什么也不做,它显示了启用ARC的项目中的泄漏,而在非ARC项目中运行良好。
- (void)viewDidLoad
{
[super viewDidLoad];
self.searchQueue = [[NSOperationQueue alloc] init];
self.searchQueue.maxConcurrentOperationCount = 1;
__block NSBlockOperation *searchOperation = [NSBlockOperation blockOperationWithBlock:^{
if (searchOperation.isCancelled) return;
}];
[self.searchQueue addOperation:searchOperation];
}谢谢。
发布于 2012-05-17 19:10:51
您已经将searchOperation声明为__weak,以避免保留周期:
__weak NSBlockOperation *searchOperation;
NSBlockOperation *tmp = [NSBlockOperation blockOperationWithBlock:^{
if (searchOperation.isCancelled) return;
}];
searchOperation = tmp;另一种可能的解决方案是:在使用searchOperation之后,在块中将它设置为零。
https://stackoverflow.com/questions/10634421
复制相似问题