리테인(retain)으로 선언된 프로퍼티의 메모리관리
Xcode(Object-C)에서 retain으로 선언된 프로퍼티의 동작
Object-C의 특이한 메모리관리중 retain으로 선언된 프로퍼티는 컴파일시 처리하는 일종의 매크로로서
-헤더파일(*.h) -
@interface ExAppDelegate {
CLLocation *myLocation;
....
}
@property (nonatomic, retain) CLLocation *myLocation;
...
@end
-소스파일(*.m)-
@synthesize myLocation;
이렇게 작성하면 Xcode 가 소스파일을 컴파일할때 @synthesize란 매크로를 만나서
자동으로 myLocation의 게터와 세터 (getter, setter)를 만들며, 그때 retain이란
지시어가 있으면 아래와 같은 게터와 세터를 생성해 낸다.
1.게터(getter) : 프로퍼티의 값을 가져올 때(get)사용되는 코드
-(CLLocation *) myLocation {
return myLocation; // readonly,retain, assign 모두 동일
}
2.세터(setter) : 프로퍼티에 값을 세팅(set)할 때 사용되는 코드
- (void) setMyLocation: (CLLocation *) newValue {
if(newValue !=myLocation) {
[myLocation release]; // 이전의 메모리를 해제풀(pool)로 보내기 위해 레퍼런스카운트를 1감소시킴
myLocation = [newValue retain]; //새로운 값(메모리)을 할당하고 newValue의 레퍼런스카운트 1증가.
}
}
myLocation에 새로 할당된 newValue의 메모리는 레퍼런스 카운트가 0 이 될 때까지
자동으로 해제(free)되지 않는다.
이런 부분이 아이폰용 앱을 만들때 접하는 Object-C/Xcode의 메모리괸리중 헷갈리는 부분중의 하나이다.
관련된 글:
아이폰(iPhone) OS
- Total
- Today
- Yesterday