ARC-__unsafe_unretained의 의미?
내가 제대로했는지 확인하고 싶습니다.
- 내가
__unsafe_unretain
소유하지 않은 물건이 필요 합니까? - 객체 인 경우
__unsafe_unretained
사용해야합니까 필요assign
에가@property
? 이는 객체가 유지되지 않고 내가 할당 한 객체를 참조한다는 의미입니까? - 델리게이트를 제외하고 언제 사용하고 싶습니까?
- ARC 관련인가요 아니면 이전에 사용 했나요?
LLVM 컴파일러 3.0을 소개합니다 네 개의 새로운 소유권 예선 : __strong
, __autoreleasing
, __unsafe_unretained
,와 __weak
. 처음 세 개는 사양에 따라 ARC 외부에서도 사용할 수 있습니다 .
Joshua가 지적했듯이 기본적으로 모든 포인터는 __strong
ARC 아래 에 있음을 암시합니다 . 즉, 개체가 해당 포인터에 할당 될 때 해당 포인터가 참조하는 동안 유지됩니다. 이것은 대부분의 경우에 좋지만 여기 에 내 대답 에서 설명했듯이 유지주기의 가능성을 열어줍니다 . 예를 들어 인스턴스 변수로 다른 개체를 포함하는 개체가 있지만 두 번째 개체에 대리자 인 첫 번째 개체에 대한 강력한 링크가있는 경우 두 개체는 해제되지 않습니다.
이러한 이유로 __unsafe_unretained
및 __weak
한정자가 존재합니다. 가장 일반적인 용도는 대리자에 대한 것입니다. 여기에서 해당 대리자에 대한 속성을 weak
or unsafe_unretained
속성 ( assign
is effective unsafe_unretained
)으로 정의한 다음 각 인스턴스 변수를 __weak
또는 로 표시하여 일치 __unsafe_unretained
시킵니다. 즉, 델리게이트 인스턴스 변수는 여전히 첫 번째 개체를 다시 가리 키지 만 해당 개체가 유지되지 않으므로 유지주기가 중단되고 두 개체가 모두 해제 될 수 있습니다.
이는 델리게이트 외에도 코드에서 형성 될 수있는 다른 유지주기를 중단하는 데 유용합니다. 유용하게도 Leaks 계측기에는 이제 애플리케이션에서 발견 한 유지주기를 그래픽 방식으로 보여주는 Cycles보기가 포함됩니다.
모두 __unsafe_unretained
와 __weak
객체의 보유를 방지하지만, 약간 다른 방식이다. 의 경우 __weak
객체에 대한 포인터가 가리키는 객체 nil
의 할당 해제시 로 변환 되므로 매우 안전한 동작입니다. 이름에서 알 수 있듯이 __unsafe_unretained
는 할당이 취소 된 후에도 개체가 있던 메모리를 계속 가리 킵니다. 이로 인해 할당 해제 된 객체에 액세스하기 때문에 충돌이 발생할 수 있습니다.
그렇다면 왜 사용 __unsafe_unretained
하겠습니까? 불행히도 __weak
iOS 5.0 및 Lion에 대해서만 배포 대상으로 지원됩니다. iOS 4.0 및 Snow Leopard를 다시 대상으로 지정하려면 __unsafe_unretained
한정자 를 사용 하거나 Mike Ash의 MAZeroingWeakRef 와 같은 것을 사용해야합니다 .
- 아니요,
weak
소유하지 않은 개체 에도 사용할 수 있습니다 . - 아니요,
unsafe_unretained
부동산 에서도 사용할 수 있습니다 . - 내 이해는
unsafe_unretained
항목이weak
가리키는 항목이 해제 될 때 항목을 지우는 추가 안전없이 항목과 같다는 것입니다 (및 그에 따른 오버 헤드). - 이것은 전적으로 ARC 일입니다.
__unsafe_unretained
ARC 이전의 객체 기본 저장소와 동일합니다. ARC에서 기본값은 이제 __strong
참조가 범위를 벗어날 때까지 참조 할 수 있음을 의미합니다.
__unsafe_unretained에 대한 또 다른 관찰 : __unsafe_unretained로 선언 된 iVars가있는 시뮬레이터가 아닌 장치의 앱에서 충돌이 발생했습니다 ! 예, ARC 마이그레이션의 코드에있는 버그 였지만 장치와 시뮬레이터 사이에 이러한 차이를 처음 발견했습니다.
참고 URL : https://stackoverflow.com/questions/8592289/arc-the-meaning-of-unsafe-unretained
'IT TIP' 카테고리의 다른 글
DB의 모든 테이블, 행 및 열에서 문자열 검색 (0) | 2020.10.15 |
---|---|
Java 제네릭-클래스 가져 오기? (0) | 2020.10.15 |
Rabbitmq 관리를 위해 사용자를 재설정하는 방법 (0) | 2020.10.15 |
Python 3에서 사용자 지정 비교 함수를 사용하는 방법은 무엇입니까? (0) | 2020.10.14 |
튜플과 KeyValuePair를 사용하는 것이 언제 더 낫습니까? (0) | 2020.10.14 |