규칙1]
- alloc, copy, new 를 포함하는 메서드는 retain된 객체를 리턴한다.
이 리턴되는 객처는 retain되어 있기 때문에 반드시 release를 호출해야 한다.
규칙2]
- 자신이 retain 호출했다면 반드시 release를호출해야 한다.
규칙3]
- 클래스메서드가 객체를 생성해 줄 때는 autorelease 객체를 리턴한다.
그렇기 때문에 별도의 release를 호출하지 않아도 오토릴리즈 풀이 자동으로 release를 호출한다.
하지만, 이 객체에 대한 retain을 호출했다면 같은 횟수만큼 release를 호출해야 한다.
예)
NSString *pStr = [NSString stringWithString:@"Test"];
규칙4]
- 배열, 딕셔너리 등의 자료구조 클래스는 추가된 객체를 retain하고, 항목을 제거할 때 release를 한다.
NSArray, NSDictionary, NSSet등의 자료구조 클래스는 항목으로 추가되는 객체에 retain을 한 번 호출한다.
그리고 객체가 포함 객체에서 제거될 때 release를 호출한다. 그렇기 때문에 별도의 retain을 해 줄 필요는 없다.
규칙5]
- retain 속성을 갖는 접근자의 경우(@property (retain) ... ) 객체가 설정될 때 자동으로 retain 된다.
예)
myImage = [[UIImage alloc] init]; // myImage retain '1'
self.userImage = myImage; // myImage retain '2'
[myImage release]; // myImage retain '1'
...
self.userImage = myImage2; // myImage retain '0'
규칙 6]
- 메서드가 리턴하는 객체는 autorelease을 하고 리턴하도록 한다.
예)
- (NSString *) findTopPlayer{
NSString *ret = [[top objectAtIndex:0] copy];
[ret autorelease];
return ret;
}
규칙7]
- IBOutlet으로 연결되는 객체는 retain 되어 있다. 따라서, 반드시 release를 호출해야 한다.
예)
IBOutlet UIButton *button;
....
- (void) dealloc{
[button release];
[super dealloc];
}
'프로그래밍 > iOS' 카테고리의 다른 글
.a 라이브러리 파일 SVN commit 방법 (0) | 2012.05.24 |
---|---|
Xcode 에서 라이브러리 파일(*.a)가 ignore 처리되어 SVN에 등록되지 않을때 해결방법 (0) | 2012.05.24 |
MPMoviePlayerController의 상태에 따른 처리팁 (0) | 2012.05.15 |
푸쉬 알림 관련 자료 (0) | 2012.05.09 |
IAP 관련 정리 자료 (0) | 2012.05.09 |