xcode 4.2(ios sdk4.3과 이하 버전)와 이전 버전은retain과 assign을 사용하고 ARC를 지원하지 않습니다.
xcode4.3(ios5와 이상 버전) 이후 ARC가 생겼고strong과 weak
을 사용하기 시작했다.
strong,weak,retain,assign의 차이
assign
assign: 비지침 변수에 사용합니다.기본 데이터 형식(예를 들어 NSInteger)과 C 데이터 형식(int,float,double,char, 등)에 사용되며, @property(nonatomic,assign) int number, @property (nonatomic, assign) id className;//id는 assign
을 사용해야 합니다.
어쨌든 기억해라: 앞에'*'가 필요 없는 건 assign으로 하자
retain
retain: 포인터 변수에 사용합니다.즉, 당신이 변수를 정의한 후에 이 변수는 프로그램이 실행되는 과정에서 변경되고 다른 방법에 영향을 미친다는 것이다.일반적으로 문자열(NSString, NSMutableString), 배열(NSMutableArray, NSArray), 사전 대상, 보기 대상(UIView), 컨트롤러 대상(UIViewController) 등
현재 시스템이 자동으로 생성하는 속성은 모두 weak으로 수식된 것이다. 내 생각에 xcode4.2는 ARC를 지원하지 않기 때문에 모두retain을 사용한다.
현재 xcode4.3 ARC를 지원하기 때문에 애플은 프로그래머에게 리턴을 포기하고 앞으로 위크를 사용하라고 조언했다.
weak은 assign에 해당하고 xcode4.3 개발 환경에서 assign 대신 weak 사용을 포기
unsafe_unretained unsafe_unretained는ios5버전 이하의assign,즉unsafeunretained,weak,assign 세 개 다 똑같아요.왜냐하면 ios5는 weak을 사용하기 때문에 ios4에 있어요.3 사용할 수 없습니다. weak을 unsafe로 변경하면unretained, 그럼 사용할 수 있어요.결국 iOS 5 이전 시스템은 weak 대신 이 속성을 사용했다.
하나의 클래스가 NSObject를 계승하면 이 클래스의 속성은copy를 사용해야 한다. 예를 들어:
이 표시는 속성이 읽기 전용임을 설명합니다. 기본 표시는 읽기와 쓰기입니다. 읽기 전용을 지정하면 @implementation에서 읽기만 필요합니다.@synthesize 키워드를 사용하면, 읽기 방법이 해석됩니다.그리고 만약 점 조작부호를 속성에 값을 부여하려고 한다면, 컴파일 오류가 발생할 것입니다.
readwrite
이 표시는 속성이 읽기와 쓰기로 되어 있음을 설명하는데 이것도 기본 속성입니다.설정기와 리더는 @implementation에서 실행되어야 합니다.@synthesize 키워드를 사용하면 리더와 설정기가 해석됩니다.
assign
이 표시는 설정기가 직접 값을 부여하는 것을 설명하는데 이것도 기본값이다.쓰레기 수집을 사용하는 프로그램에서 assign을 사용하고 NSCopying 프로토콜에 맞는 속성을 원한다면 기본값을 간단하게 사용하지 않고 이 표시를 명확하게 지적해야 한다. 그렇지 않으면 컴파일 경고를 받을 것이다.이것은 컴파일러에게 복사할 수 있어도 값을 부여해야 한다는 것을 다시 한 번 설명한다.
retain
retain이 값을 부여할 때 전송된retain 메시지를 깨우도록 지정합니다.이 속성은 Objective-C 객체 유형에만 사용할 수 있으며 Core Foundation 객체에는 사용할 수 없습니다.(원인은 명백하다.retain은 대상의 인용 계수를 증가시킬 수 있지만 기본 데이터 형식이나CoreFoundation 대상은 인용 계수가 없다--역자 주석).
copy
값을 부여할 때 전송된 값의 복사본을 사용한다고 지적했다.복제 작업은 copy 메소드에 의해 수행되며 NSCopying 프로토콜이 실행된 객체 유형에만 적용됩니다."보다 자세한 내용은""복제""섹션을 참조하십시오."
nonatomic
액세서리는 원자 조작이 아니라 기본적으로 액세서리는 원자 조작이라고 지적했다.즉, 다중 스레드 환경에서 해석된 액세서리는 속성에 대한 안전한 접근을 제공하고, 액세서리에서 받은 반환값이나 설정기를 통해 설정된 값을 한 번에 완성할 수 있으며, 다른 스레드라도 접근을 하고 있다.nonatomic를 지정하지 않으면 메모리를 관리하는 환경에서 해석된 액세서리가 되돌아오는 값을 보존하고 자동으로 방출합니다. nonatomic를 지정하면 액세서리는 간단하게 이 값을 되돌려줍니다.
@property 매개 변수
메모리 관리 관련 매개 변수
Retain: 대상release 옛 값,retain 새 값(OC 대상 유형에 적용)
Assign: 직접 할당(기본값, 비oc 대상 유형에 적용)
Copy:release 이전 값,copy 새 값
set 방법을 생성할지 여부(속성만 읽으면 생성하지 않음)
Readonly: 읽기만 하고 Getter의 성명과 실현만 생성
Readwrite: 기본적으로setter와getter의 성명과 실현을 동시에 생성
다중 스레드 관리(애플은 어느 정도 다중 스레드 조작을 차단했다)
Nonatomic: 고성능, 보통 이걸로
Atomic: 저성능
Set 및 get 메서드의 이름
set과 get 방법의 이름을 수정합니다. 주로 볼 형식에 사용됩니다.브리 형식으로 돌아가는 방법 이름은 일반적으로 is로 시작하기 때문에, 이름 수정은 브리 형식의 Getter에 사용됩니다.