2014-08-27 1 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 클래스는 onCompletedBlock를 실행 한 후 배경에 HTTP 요청을 보낼 것입니다.

내 문제 : 몇 번 시스템이 현재보기 컨트롤러를 dealloc 한 다음 onCompleted 블록을 호출하고 이미 할당 해제되었으므로 [lstSubCategoriesBlock reloadData]에서 충돌합니다.

viewContorler를 다시 구현할 때 [lstSubCategoriesBlock reloadData] 시스템이 실행되지 않도록하려면 어떻게해야합니까? 객체가 해제 될 때

+0

를 가리키는 그렇게한다는'여기에 쓸모가 __block' - 그 변수를 좀 더 설명을 제공하시기 바랍니다 수 – newacct

+0

@newacct에 할당되지 않습니다! – david

+0

변수의'__block'은 변수가 블록 내부에 할당되어 있거나 변수가 블록 외부에 할당되어 있고 블록 내부에서 변경 사항을 확인하려는 경우에만 유용합니다. 이들 중 어느 것도 여기서 일어나지 않습니다. – newacct

답변

4

는 사용 __weaknil

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

    }]ExecuteRequest];