본문 바로가기
컴퓨터공학/프로그래밍

ObjectiveC | Property Synthesize 지시어

by KISCH 2020. 2. 7.
반응형

 

 

목적


❛ 같은 클래스가 아닌 외부에서 접근할 수 있는 객체의 속성

 외부객체에서 참조할 수 있도록 getter/setter를 만듬

1. setter : 값을 넣을 때

2. getter : 값을 가져올때

 변수마다 getter, setter 만들 수가 없으니 Property 탄생

1. 인스턴스 멤버 변수들의 값에 편리하게 접근하기 위해서 property 지시어 사용

2. accessor method를 자동으로 생성하여 property를 사용할 때 일일이 get, set등을 붙이지 않아도 된다

 

 

objectiveC

 

 

 

구현


 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

댓글