2012-01-10 3 views
3

가능한 중복 :
using ARC, lifetime qualifier assign and unsafe_unretained약한 참조 속성에 대해 unsafe_unretained 한정자보다 할당을 선호해야하는 이유는 무엇입니까?

둘 사이의 차이점은 무엇입니까?

@property(unsafe_unretained) MyClass *delegate; 
@property(assign) MyClass *delegate; 

둘 다 0이 아닌 약한 참조입니다. 맞습니까? 그렇다면 assign 대신에 unsafe_unretained을 더 길고 딱딱하게 써야하는 이유가 있습니까?

참고 : 제로 잉 참조 인 weak이 있음을 알고 있습니다. 하지만 그것은 iOS> = 5뿐입니다.

+0

답변 찾기 http://stackoverflow.com/questions/8397511/using-arc-lifetime-qualifier-assign-and-unsafe-unretained –

답변

9

속성 접근 자에서 네 그렇습니다. 이 경우에는 assign 속성이 unsafe_unretained으로 매핑됩니다. 그러나 ivar 합성을 사용하기보다는 수동으로 ivar를 작성하는 것을 고려하십시오. ARC 전에이 아니었다 반면

@interface Foo 
{ 
    Bar *test; 
} 
@property(assign) Bar *test; 
@end 

이 코드는, ARC에서 이제 올바르지 않습니다. 모든 Obj-C 객체의 기본 속성은 __strong입니다. 앞으로 나아갈 수있는 적절한 방법은 다음과 같습니다.

@interface Foo 
{ 
    __unsafe_unretained Bar *test; 
} 
@property(unsafe_unretained) Bar *test; 
@end 

또는 아이바의 합성과

@property(unsafe_unretained) Bar *test 그래서 정말 그 단지 다른 같은 일을 작성하는 방법,하지만 다른 의도를 보여줍니다.

+0

iOS 4에서 ivar 합성을 사용할 수 있습니까? 또는 iOS 5 전용입니까? iVar 합성을 사용할 때 무엇을 명심해야합니까? – openfrog

+0

iOS 2.0의 모든 버전이이를 지원합니다. –

관련 문제