AFAIK, __block
은 블록 내부에서 변수가 선언 한 주소를 블록 내부에서 변경할 때 사용됩니다.ARC는 __block을 사용해야 할 때 알려 줄까요?
그러나 변수가 가리키는 값을 변경하지만 포인터가 그대로 유지되는 경우 어떻게해야합니까? 예 : NSMutableArray *array
이 있고 블록 내에 [array addObject:object]
을 처리하면 어떻게됩니까? 이 경우 포인터 array
을 변경하지 않지만 포인터가 가리키는 값을 변경합니다. 따라서 NSMutableArray *array
을 선언 할 때 여전히 __block
을 사용해야합니까?
어떤 컴파일러 최적화에 대해 (가 주어진 실행 경로에 대해 "변화의 도메인을"정의하기 매우 어렵습니다 ...이 OO에서 동시 프로그래밍은 열심히 저주되는 이유 중 하나 있습니다) ? '__block'은 객체가 결코 바뀌지 않는다는 것을 암시하고, NSArray가 인라인 되었다면, 이후의 용량 호출은 잘못되었을 수도 있습니다. – Dani
'__block'은 변수가 변경 될 수 있음을 나타냅니다. 변수가'__block'인지 const-copy인지 (디폴트는 그대로), 객체에 대한 메소드 호출은 영향을받지 않습니다. – bbum
하지만 변수 (NSArray *)가 자체 속성 인 경우 어떻게됩니까? __block을 추가해야합니까? – Amnysia