2014-08-28 1 views
1

아래의 두 코드 조각 사이의 차이가 무엇인가 그들 중 어느참조로 인스턴스 변수에 액세스 할 수 있습니까?

1.

__block __weak NSMutableArray *arrBlock = self.arr ; 
[[AsyncRequest initRequest:url onCompletedBlock:^(NSMutableArray *arr) { 
     arrBlock = arr; 
    }]ExecuteRequest]; 

2.

id __weak weakself = self; 
[[AsyncRequest initRequest:url onCompletedBlock:^(NSMutableArray *arr) { 
     weakself.arr = arr; 
    }]ExecuteRequest]; 

주기를 유지하는 원인이 있지만, 애플 suggests은 첫 번째를 사용. 두 번째 문제가 있습니까?

+0

첫 번째 경우에'arrBlock'을'__weak'로 만드는 것은 의미가 없습니다. – newacct

+0

@newacct 감사합니다. 따라서 두 번째 문제는 없습니다! – david

답변

1

다른 효과가 있습니다. 첫 번째 변수는 지역 변수를 업데이트하고 두 번째 변수는 인스턴스 변수 (속성)를 업데이트합니다.

어떤 것을 사용하고 싶은가에 따라 다르지만, 블록이 비동기 적으로 실행되면 no-op처럼 첫 번째 모습을 원합니다.