Loading
2010. 7. 20. 13:25 - citybell.com

Xcode에서 retain으로 선언된 프로퍼티의 게터와 세터(getter,setter)

리테인(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
  • Total
  • Today
  • Yesterday