2014-08-27 13 views
2

我有這樣的代碼:如何在調用dealloc後停止運行塊? IOS

__block NSMutableArray *subCategoriesBlock = self.subCategories ; 
__block UITableView *lstSubCategoriesBlock = self.lstSubCategories; 
[[AsyncRequest initRequest: onCompletedBlock:^(NSMutableArray *subcategories) { 
     [subCategoriesBlock addObjectsFromArray:subcategories]; 
     [lstSubCategoriesBlock reloadData]; 

    }]ExecuteRequest]; 

AsyncRequest類將派上後臺的HTTP請求,然後將運行onCompletedBlock。

我的問題: 有些時候系統釋放當前的視圖控制器,然後調用onCompleted塊,並崩潰在[lstSubCategoriesBlock reloadData]因爲它已經釋放。

我應該怎麼做,防止系統在執行viewContorller時執行[lstSubCategoriesBlock reloadData]

+0

的'__block'沒用在這裏 - 這些變量永遠不會分配給 – newacct 2014-08-27 19:10:12

+0

@newacct請你提供更多的解釋! – david 2014-08-28 07:33:06

+0

變量上的'__block'只有在變量被分配到塊內部時,或者變量被分配到塊外部並且希望在塊內部看到變化時纔有用。這些都不在這裏發生。 – newacct 2014-08-28 10:15:30

回答

4

使用__weak,這樣當對象被釋放它指向nil

__block __weak NSMutableArray *subCategoriesBlock = self.subCategories ; 
__block __weak UITableView *lstSubCategoriesBlock = self.lstSubCategories; 
[[AsyncRequest initRequest: onCompletedBlock:^(NSMutableArray *subcategories) { 
     [subCategoriesBlock addObjectsFromArray:subcategories]; 
     [lstSubCategoriesBlock reloadData]; 

    }]ExecuteRequest]; 
相關問題