2012-05-17 40 views
2

我有麻煩指的是塊內部的'NSBlockOperation'。我需要檢查操作是否被取消,並且似乎任何對'searchOperation'的訪問只是在啓用ARC的項目中運行時發生泄漏。NSBlockOperation泄漏ARC

這段代碼基本上什麼都不做,它顯示了在啓用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]; 
} 

謝謝。

回答

4

你有聲明searchOperation作爲__weak以避免保留週期:

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

另一種可能的解決方案:設置searchOperation爲nil時使用它後塊內。