먼저 이 글은 모두 Head First iPhone Development 책을 읽고 내게 필요한 부분, 중요한 부분, 느낀점등을 잊지 않기위해, 나중에 글쓴이가 봤을 때 왜 이렇게 했었는지 등을 다시 한번 확인하기 위해 작성한것임을 밝힙니다.
기본적으로 각 객체는 자신을 참조하는 객체들의 수를 기억하고 있다가, 참조수가 0이 되면 (자신을 참조하는 객체가 없는 경우) 메모리에서 제거한다. 프로퍼티를 사용 할 경우, 컴파일러가 이런 메모리 관리 기능을 처리한다.
다음은 몇몇 프로퍼티 속성관련 메모리처리 방법이다.
readonly : getter 만 생성한다.
- (NSString*) myField { // getter 생성
return myField;
}
retain : getter 와 setter 둘 다 생성하며, 새로운 객체를 retain 하고, 기존의 객체를 release 한다.
- (NSString*) myField { // getter 생성
return myField;
}
- (void) setMyField: (NSString*) newValue { // setter 생성
if (newValue != myField) { // 생성된 setter는 새로운 객체가 기존 것과 다른지 확인한다.
[myField release]; // 기존 객체를 release 시킨다.
myField = [newValue retain]; // 새로운 객체를 retain 한다.
}
}
assign : getter 와 setter 둘 다 생성하며, 기존의 객체를 release 하지 않는다.
- (NSString*) myField { // getter 생성
return myField;
}
- (void) setMyField: (NSString*) newValue { // setter 생성
myField = newValue;
}
retain 과 release 외에도 Objective-C 에서는자동으로 메모리를 release 하는 오토릴리스 (autorelease) 풀을 제공한다.
이 풀은 기본적으로 객체에 대한 배열이며, 현재 이벤트에 대한 처리가 끝나면 Objective-C 런타임 시스템이 release 할 객체를 갖고 있는다.
어떤 객체를 autorelease 풀에 넣기 위해서는 다음과 같이 메시지를 보낸다.
[aString autorelease];
지금 당장의 retain 수는 변하지 않지만, 현재의 이벤트 루프가 끝나면 aString객체는 release 메시지를 받게 된다. autorelease는 처리와 관련한 성능에 영향을 미치므로, 자주 사용해서는 안 된다. 가능하면 명시적으로 retain 과 release 해주는 것이 더 좋다.
'공부 > iPhone' 카테고리의 다른 글
아이폰개발 용어 4 (0) | 2010.10.03 |
---|---|
아이폰개발 용어 3 (0) | 2010.10.03 |
자주 쓰이는 프로퍼티 (Property) 속성 (0) | 2010.10.02 |
아이폰개발 용어 2 (0) | 2010.10.02 |
프로토콜 (Protocol) (0) | 2010.10.02 |