규칙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' 카테고리의 다른 글
[IOS] image size (0) | 2010.11.28 |
---|---|
[XCODE] Breakpoint가 안먹을 때 (0) | 2010.11.28 |
[XCODE] Redefine NSLog (0) | 2010.11.16 |
[XCODE] DEBUGING 팁 (0) | 2010.11.16 |
[IOS] Core Data에서 SQLite 사용하기 (0) | 2010.11.01 |