저는 Xcode의 문서를 읽고 있는데 여기에 저를 당혹스럽게하는 것이 있습니다.
__block typeof(self) tmpSelf = self;
[self methodThatTakesABlock:^ {
[tmpSelf doSomething];
}];
다음은 문서에서 복사되었습니다.
블록은 캡처하는 변수에 대한 강력한 참조를 형성합니다. 당신이 사용하는 경우
self
블록 내에서 블록에 강한 참조를 형성self
그렇다면,self
또한 블록에 대한 강한 참조 (가 일반적으로 수행하는), 강한 참조주기 결과가 있습니다. 순환을 피하려면__block
위의 예에서와 같이 블록 외부에서 self에 대한 약한 (또는 ) 참조를 만들어야합니다 .
'약한 (또는 __block
)'이 무슨 뜻 인지 이해가 안 되나요?
이다
__block typeof(self) tmpSelf = self;
과
__weak typeof(self) tmpSelf = self;
여기도 똑같나요?
문서에서 다른 부분을 찾았습니다.
참고 : 가비지 수집 환경에서
__weak
및__block
수정자를 변수에 모두 적용 하면 블록이 활성 상태를 유지하는지 확인하지 않습니다.
그래서 저는 완전히 당황합니다.