[Property Attribute]
readonly |
Property가 Immutable로 선언된다. @synthesize 선언 시 getter 만 생성한다. readwrite와 상호배타적이다. |
readwrite |
Property가 mutable로 선언된다. @synthesize 선언 시 getter, setter 생성 readonly 와 상호배타적이며 디폴트이다.. |
copy |
객체의 복사본을 setter에 전달하고 복사본의 참조를 저장하게 setter를 선언한다. assign, retain 과 상호배타적이다. |
assign |
원본의 포인터를 설정하도록 setter 선언한다. copy, retain 과 상호배타적이다. 아무 선언이 없을 시 assiign로 가정되나 몇 가지 경우에는 명시적으로 선언해야 한다. |
retain |
assign과 유사하나 객체의 레퍼런스를 retain 한다. Managed memory 환경에서만 의미가 있다. |
getter=name |
getter의 이름을 변경할 수 있다. 다만 표준 getter, setter 네이밍 규칙을 지키지 않으므로 Key-Value Coding 에서 이 Property를 인지하지 못한다. |
setter=name |
setter의 이름을 변경할 수 있다. readonly에서 설정할 수 없고 getter와 동일하게 Key-Value Coding 에서 인지 못하는 문제가 있다. |
nonatomic |
thread-safe를 설정하지 않는 것으로 IOS 경우 성능향상이 있다. |
[기본형]
@interface AllWeatherRadial : Tire {
float rainHandling;
float snowHandling;
}
@property float rainHandling; // 기본형, readwrite, getter/setter 생성
[읽기전용]
@property (readonly) float rainHandling;
[copy]
객체의 경우 특히 문자열 경우 사용하는 경우가 많다(일반형일 때는 디폴트가 복사이기 때문에 의마가 없다) 순환참조에 의한 메모리 릭 발생을 예방하고 다른 곳에서 원본을 변경할 때 side effect를 예방한다.
@synthesize으로 생성되는 setter/getter는 아래와 유사한 형태이다.
@property (copy) NSString* name;
-- m 파일 --
@synthesize name;
-(void)setName:(NSString*)newName {
[name release];
name = [newName copy];
}
-(NSString*)name {
return name;
}
[retain]
객체의 참조횟수를 증가시킨다.
@synthesize으로 생성되는 setter/getter는 아래와 유사한 형태이다.
@property (copy) NSString* name;
-- m 파일 --
@synthesize name;
-(void)setName:(NSString*)newName {
[name release];
name = [newName retain];
}
-(NSString*)name {
return name;
}
[이름변경 및 기타]
@interface Person : NSObject {
NSString* firstName;
NSString* secondName;
BOOL adult;
}
@property (copy) NSString* firstName;
@property (copy) NSString* lastName;
@property (getter=isAdult) BOOL adult; // getter 이름 변경
@property (readonly, nonatomic) NSString* fullName;
-- m 파일 --
@synthesize firstName;
@synthesize lastName = secondName; // 다른 이름 사용
@synthesize adult;
getter/setter 의 이름을 변경한 경우 .연산자를 사용할 수 없고 이것 때문에 Key-Value Coding을 사용할 수 없다.
변수명과 다른 property 명을 사용할 수 있다. 다만 클래스 내부에서 .연산자를 이용할 경우에는 self.secondName = @"XXX" 으로 사용해야 한다.
@synthesize 선언없이 직접 구현도 가능하다. 위의 fullName의 경우 아래와 같이 구현하면 된다.
-(NSString*)fullName {
// 구현
...............................
}
참고서적 : Learn Object-C on the Mac
Learn Object-C for Java Developers
[출처] [Objective-C] Property 정리|작성자 검은별
'OBJECTIVE-C' 카테고리의 다른 글
Singleton Class 싱글톤 메소드 설정 방법 (0) | 2014.12.08 |
---|---|
iOS7에서 (0,0)이 Status bar 가리는 문제 (0) | 2014.01.22 |
[iOS] 스토리보드에서 코드를 이용한 View 전환에 관한 정리 (0) | 2013.10.25 |
[퍼옴]iPhone custom camera overlay (plus image processing) : how-to [duplicate] (0) | 2013.04.08 |
[퍼옴]iOS: 카메라 기능 구현을 위한 UIImagePickerController Cook Book (0) | 2013.04.08 |