다음은 다른 질문에서 온 것입니다. 제 질문은 main()의 retain/release 사용에 관한 것입니다. 이 간단한 예제에서 내 이해에서 retain/release 문은 필요하지 않습니다. 그러나 더 복잡한 상황에서는 행성 인스턴스가 예기치 않게 해제되지 않도록 추가하는 것이 가장 좋습니다. 오브젝트 인스턴스 메모리 관리
EDIT_001
+(Planet *) planet {
gPlanetCount++;
//return [[[Planet alloc] init] autorelease];
return [[[self alloc] init] autorelease]; // Better
}
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Planet *outerMost;
outerMost = [[Planet planet] retain];
...
... some code
...
[outerMost release];
[pool drain];
return 0;
}
그래서 나는 더 나은로 위를 작성할 수 있습니다.
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Planet *outerMost;
outerMost = [Planet planet];
...
... some code
...
[pool drain];
return 0;
}
환호 게리
메모리 관리 코드가 정확하지만 다음을 추가 할 수 있습니다. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 을 주 기능의 첫 번째 줄로 사용하십시오. 마지막에 풀을 배출 할 때 코드 조각에이 태그를 두는 것을 잊어 버렸을 것입니다. –
Markus, 바로 지금 바로 그 코드를 추가 할 것입니다. 코드에 넣었습니다. 여기에 코드를 추가하는 것을 잊어 버렸습니다. 지적 해 주셔서 감사합니다. – fuzzygoat
클래스 수준 메소드에서 [self alloc]을 사용하는 것을 본 적이 없습니다. 이게 효과가 있니? 나는 "자기"가 클래스의 인스턴스를 위해 예약되었다고 생각했다. – rein