목적
❛ 같은 클래스가 아닌 외부에서 접근할 수 있는 객체의 속성
❛ 외부객체에서 참조할 수 있도록 getter/setter를 만듬
1. setter : 값을 넣을 때
2. getter : 값을 가져올때
❛ 변수마다 getter, setter 만들 수가 없으니 Property 탄생
1. 인스턴스 멤버 변수들의 값에 편리하게 접근하기 위해서 property 지시어 사용
2. accessor method를 자동으로 생성하여 property를 사용할 때 일일이 get, set등을 붙이지 않아도 된다
구현
❛ Property (속성) : 단순히 이 클래스에 이런 변수가 있다고 알림 (*클래스 내부의 전역변수와 전혀 관계가 없음)
❛ Synthesize (합성) : 헤더에서 정의한 것을 실체화
1. 같은 이름으로 내부에 전역 변수를 만듬
-> 같은 이름이 이미 전역변수에 선언되어 있으면, 그대로 그것을 사용 (self.xx 사용시 외부객체에 접근함)
2. getter함수를 만듬
3. readonly가 설정되어 있지 않으면 setter함수를 만듬. (반대로 말하면, readonly일 경우 getter만 생성)
-> 클래스 외부뿐 아니라, 클래스 내에서도 쓰기 가능하려면 retain, readonly 속성을 같이 써야 한다
- cf) 내부는 전혀 다른 변수명을 사용하는 경우
NSString *_title;
@property (nonatomic, copy) NSString *title;
@synthesize title = _title;
// 외부에서는 title로 접근, 내부에서는 _title 객체를 사용,
예제
a = ... // 바로 할당
self.a = ... // setter 메서드 호출, retainCount 증가
self.a = [[... alloc] init]; // retainCount 증가 하므로 dealloc해도 메모리 릭 발생
그래서
b = [[... alloc] init];
self.a = b;
[b release];
ex1)
@interface HelloWorldScene : CCScene {
HelloWorld *_layer;
}
@property (nonatomic, retain) HelloWorld *layer;
...
@synthesize layer = _layer;
- (id)init {
if ((self = [super init])) {
self.layer = [HelloWorld node];
[self addChild:_layer];
}
return self;
}
- (void)dealloc {
self.layer = nil;
[super dealloc];
}
'컴퓨터공학 > 프로그래밍' 카테고리의 다른 글
C# | ref. 프로그래밍 가이드 (0) | 2020.02.07 |
---|---|
C# | 레퍼런스 둘러보기 (0) | 2020.02.07 |
C# | 자료형 (0) | 2020.02.07 |
C# | 기초 (0) | 2020.02.07 |
ObjectiveC | 기초 (0) | 2020.02.07 |
C++ | 기초 (0) | 2020.02.07 |
C | 기초 (0) | 2020.02.07 |
함수 | 익명메소드 람다식 (0) | 2020.01.03 |
댓글