2014-08-27 68 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]; 
相关问题