ARC 하에서,
assign
은 __unsafe_unretained
을 의미합니다.
weak
은 __weak
소유권을 의미합니다.주어진 대리인 속성이 iOS7.1 SDK에 할당되었지만 댓글이 약한 이유는 무엇입니까?
왜
는 위임 속성 assign
을 부여하지만, iOS7.1 SDK에 weak
을 주석으로?
ARC 하에서,
assign
은 __unsafe_unretained
을 의미합니다.
weak
은 __weak
소유권을 의미합니다.주어진 대리인 속성이 iOS7.1 SDK에 할당되었지만 댓글이 약한 이유는 무엇입니까?
왜
는 위임 속성 assign
을 부여하지만, iOS7.1 SDK에 weak
을 주석으로?
기록. ARC 이전에는 "weak"(비 보유) 참조에 assign
을 사용했습니다. "약하다"는 뜻은 "나는 그걸 붙잡지 않을 것이다"라는 뜻으로 assign
으로 번역됩니다.
속성 전에 우리는 단지 delegate
이라는 것이 규칙에 따라 retain
을 호출하지 않는다는 것을 알았습니다. 다른 비 보유 속성은 일종의 문서화가 필요했습니다.
더 많은 현대적인 규칙을 준수하기 위해 iOS SDK를 정리하기위한 지속적인 노력이 있었지만 이전 방법을 사용하는 장소는 여전히 있습니다. 정확히 왜 그들이 여기에 id
을 사용했는지 확신 할 수 없지만 공식 및 비공식 프로토콜에 대한 예전 습관이 원인 일 수 있습니다. ObjC 2 이전에는 프로토콜에서 선택적 메소드를 사용할 수 없었기 때문에 일반적으로 비공식 프로토콜을 사용했습니다 (예 : id
을 전달하고 사용자가 필요한 것에 응답했는지 확인). 프로토콜을 주석 처리하는 이러한 스타일은 종종이 경우에 사용되었습니다. (정확한 이유는 여기에 없습니다 .UIAlertViewController는 ObjC 2를 게시 한 것 같습니다. SDK에서 작업하는 데 오랜 시간이 걸리는 예제가 있습니다.)
위임 대상이 데드 델리게이트에 메시지를 보내는 결과를 초래할 수 있습니다. – Carina
예. 대의원이 경계를 벗어나는 지 확인하는 것은 발신자의 책임입니다. 이것은 종종 델리게이트가 경고를 소유하게함으로써 이루어 지는데, 이는 '델리게이트'속성이 보통 할당/약한 이유입니다. –
그러나 '약함'은 '대상이 죽었을 때 자동으로 무효로 설정'을 의미합니다. 따라서 '할당'과 다릅니다. – Carina