처음에 NSLog로 retainCount 찍으면서 보다보니.. 이걸로 해볼 수 있는게 아니더군요. ㅠㅠ
http://skyfe.tistory.com/entry/test
http://skyfe.tistory.com/entry/ObjC-%EA%B0%9D%EC%B2%B4%EC%9D%98-retainCount-%EC%9D%B4%EC%95%BC%EA%B8%B0
위 블로그의 글을 읽고나서 미친짓이란걸 깨달았습니다.
헤더(.h) 파일에서 인스턴스 변수 선언하고 retain으로 property 정의했고..
@interface Test : NSObject {
NSMutableArray *instanceArray;
}
@property (retain, nonatomic) NSMutableArray *instanceArray;
소스(.m)파일에서 synthesize하고 dealloc에서 메모리 해제한 경우
@synthesize instanceArray;
- (void)dealloc {
[instanceArray release];
[super dealloc];
}
다음과 같이 정리했습니다. ^^;
//1.인스턴스 변수에 대해 alloc한 객체를 대입했기때문에 retainCount가 +1이 되고 dealloc에서 해제되어 정상적으로 동작.
instanceArray = [[NSMutableArray alloc] init]; //O
//2.인스턴스변수에 autorelease된 객체를 대입했기때문에 이벤트 루프 종료후 autorelease pool에서 예고없이 해제될수 있음.
instanceArray = [NSMutableArray array]; //X
//아래와 같이 retain 해줄것
instanceArray = [[NSMutableArray array] retain]; //O
//아니면 property의 속성이 retain이라면 setter를 통해 autorelease된 객체를 대입하면 setter가 retinCount +1 해주기때문에 이상없음.
self.instanceArray = [NSMutableArray array]; //O
//3.property의 속성이 retain이면 setter가 retainCount +1을 하기때문에 1번처럼 변수에 직접 대입할것.
self.instanceArray = [[NSMutableArray alloc] init]; //X
instanceArray = [[NSMutableArray alloc] init]; //O
//아니면 아래처럼 객체 대입후 바로 release
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
self.instanceArray = tempArray; //O
[tempArray release]
//4.로컬변수의 경우에는 alloc, copy, new한 객체애 대해서는 release 해줄것.
NSMutableArray *tempArray = [[NSMutableArray alloc] init]; //O
[tempArray release];
//5.tempArray가 즉 자기자신이 리턴될 경우 autorelease한 객체를 리턴할것
NSMutableArray *tempArray = [[[NSMutableArray alloc] init] autorelease]; //O
//6.tempArray를 release하지 않았기 때문에 memory leak.
NSMutableArray *tempArray = [[NSMutableArray alloc] init]; //X
//7.autorelease된 객체를 또 autorelease하기때문에 stack over됨.
NSMutableArray *tempArray = [[NSMutableArray array] autorelease]; //X
//8.autorelease된 객체를 또 release하기때문에 stack over됨.
NSMutableArray *tempArray = [NSMutableArray array];
[tempArray release]; //X
'ios' 카테고리의 다른 글
Tab Bar 사라지게 하는 방법 (0) | 2020.04.03 |
---|---|
WKWebView (5) | 2018.02.14 |
[책] Objective-C 2.0 (0) | 2011.05.04 |
[책] 맥과 아이폰 개발자를 위한 Xcode (0) | 2011.05.04 |
맥용 SQLite Database Browser (1) | 2011.04.21 |