본문 바로가기

Programming/iOS

[Objective-C Tip] 디클레어 프로퍼티

반응형
Objective-c의 디클레어 프로퍼티에 대해서 알아보겠습니다.

프로퍼퍼티 속성은 readonly, readwrite, assign, retain, nonatomic  가 있습니다.

+ readonly 읽기 전용 ->읽기 쓰기 속성 ,읽기만 가능 getter메서드만 가능 
+ readwrite 읽기 쓰기 가능(기본값) ->읽기 쓰기 속성 ,단순하게 값을 대입 (기본설정)
+ assign 대입으로 값을 설정(기본값)->값의 설정 방식
+ retain 객체를 보존(retain)해서 설정 ->값의 설정 방식 ,이전에 가리키고 있던 객체를 release하여 메모리에서 제거
+ nonatomic 매소드는 배타적으로(독점적으로) 실행하지 않아도됨 ->
                       멀티쓰레드 환경에서 사용하지 않는 산 접근자를 더 빠르게 동작 하게함



프로퍼티가 객체인 경우 읽고 쓰기가 가능한 프로퍼티에 assign, retain m copy 세가지 옵션으로 지정할수 있습니다.
프로퍼티가 객체가 아닌 경우 옵션은 지정하지 않아도 된다. 지정한다면 assign만 지정할 수 있습니다.

  • getter=getterName - getter의 이름을 getterName로 지정합니다.
  • setter=setterName - setter의 이름을 setterName로 지정합니다.
  • readwrite - 기본동작으로 getter와 setter를 모두 만듭니다. Mutually exclusive로 readwrite합니다.
  • readonly - getter만 만듭니다. Mutually exclusive로 readwrite합니다. 값을 할당하려고 하면 컴파일 오류가 발생합니다.
  • assign - 기본동작이며 setter가 간단한 할당을 사용합니다.(예 location = where;) 객체를 소유할 필요가 없을때 사용합니다.
  • retain - assign과 비슷하지만 레퍼런스 카운트를 증가시킵니다. Mutually exclusive로 assign과 copy합니다. 포인터객체를 할당할 경우에는 외부에서 객체가 릴리즈되어 파괴된 객체를 참조하는 문제를 막기 위해서 클래스가 멤버객체를 소유하도록 레퍼런스카운트를 증가시킵니다.(이전 값을 release 합니다.)
  • copy - 할당하는데 객체의 복사본을 사용합니다. Mutually exclusive로 assign과 retain합니다. 포인터객체의  경우 레퍼런스의 값이 바뀌어 프로퍼티의 값이 바뀌는 걸 막기 위해 setter에서 복사본을 만들어서 할당하며 copy를 사용하려면 NSCopying 프로토콜을 구현한 객체에서만 유효합니다.
  • nonatomic - 엑세서들을 non-atomic으로 지정합니다. 멀티프로세서 환경해서는 지정해줘야 합니다. 이는 Mutually exclusive락으로 접근자 메서드를 보호하지 말라고 지시하는 것입니다. atomic이 기본동작입니다.