我在块内部引用'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];
}
感谢。
答案 0 :(得分:4)
您已将searchOperation声明为__weak
以避免保留周期:
__weak NSBlockOperation *searchOperation;
NSBlockOperation *tmp = [NSBlockOperation blockOperationWithBlock:^{
if (searchOperation.isCancelled) return;
}];
searchOperation = tmp;
另一种可能的解决方案:使用后将searchOperation设置为块内的nil。