2011-12-08 4 views
6

iOS 5에서는 더 이상 "retain"및 "release"가 지원되지 않습니다. 대신에 "강한" "약한"이 새로운 방식입니다.iOS5 @property changes

아이폰 OS 4 코드 :

@property(nonatomic, retain) 
@property(nonatomic, assign) 

에서 iOS 5 코드 :

??? 
??? 

답변

12

. "에서 iOS 5에서, 릴리스를 유지하는 것은 더 이상 지원되지 않습니다" ARC를 사용할 때와는 다릅니다.

ARC를 사용할 때 -[<NSObject> retain]은 아무 작업도하지 않습니다.

속성의 경우 ARC를 사용하는 경우 strong을 사용할 수 있지만 필수는 아닙니다 (원하는 경우 retain도 사용할 수 있음). strongretain은 동일합니다 :

@property(nonatomic, strong) 
@property(nonatomic, assign) 

그냥 당신이 (같은 프로젝트에 strongretain 모두를 사용하지 않는) 일치해야합니다. 그들은 동일하지만하지

+0

BTW Objective-C 팀은 이전 코드와 하위 호환이 가능하도록했습니다. –

+0

strong/retain 모두 사용하지 않는 심각한 이유가 있습니까? 가독성에 대한 우려입니까? –

+0

@craig 기본적으로. ARC를 처음 접하는 사람들에게는 혼란을 줄 수 있다고 생각합니다. –

5

기본적으로 retain := strongassign := weak 나는 다른 스레드가이 개체에 액세스하려고하면 개체가 의미하는 스레드로부터 안전하지 않습니다 것을 ARC Release notes

+3

사실,'assign'은'weak'보다'unsafe_unretained'에 더 가깝습니다. 약한 속성 지정은 새로운 개념입니다. –

+2

약점은 int와 같은 기본 유형에는 작동하지 않습니다. 할당을 사용해야합니다. –

4

nonatomic 속성 상태에서 살펴 본다 제안 나쁜 일이 일어날 수 있지만 이것은 원자 속성보다 훨씬 빠릅니다.

strong은 ARC와 함께 사용되며 기본적으로 개체의 보유 수에 대해 걱정할 필요가 없으므로 도움이됩니다. ARC는 작업이 끝나면 자동으로 해제합니다. 키워드 strong을 사용하면 개체를 소유하고 있음을 의미합니다.

weak 소유권은 소유자가 아니며 두 번째 객체가 놓아 지자 마자 할당 된 객체가 손실 될 때까지 객체를 추적한다는 것을 의미합니다. 예를 들면. obj.a=objectB;이 사용되고 a는 약한 속성을가집니다. 그 값은 objectB가 메모리에 남아있을 때까지만 유효합니다.

copy 숙박 시설은 아주 잘 당신이 도움이 희망 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1

의 "선언 속성"섹션을 읽어 ... 하나의 객체에 사용할 수 없도록 https://stackoverflow.com/a/5002646/919545

strong,weak,retain,copy,assign는 상호 배타적 여기에 설명 조금 밖에 ...