NSBlockOperation泄漏ARC

时间:2012-05-17 10:59:31

标签: iphone objective-c nsblockoperation

我在块内部引用'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];
}

感谢。

1 个答案:

答案 0 :(得分:4)

您已将searchOperation声明为__weak以避免保留周期:

__weak NSBlockOperation *searchOperation;
NSBlockOperation *tmp = [NSBlockOperation blockOperationWithBlock:^{
    if (searchOperation.isCancelled) return;
}];
searchOperation = tmp;

另一种可能的解决方案:使用后将searchOperation设置为块内的nil。