2010-06-24 4 views
0

초급 질문은 여기.Xcode, 명령 줄 도구 : NSAutoreleasePool이 생성 된 템플릿에있는 이유는 무엇입니까?

내 목표 :이 배경의 설계 이유를 이해하는 것.

Foundation 클래스에 연결되는 명령 줄 도구 프로젝트를 만들 때 xcode에서 다음 코드 조각을 생성했습니다.

int main (int argc, const char * argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    // insert code here... 
    NSLog(@"Hello, World!"); 
    [pool drain]; 
    return 0; 
} 

NSAutoreleasePool의 기능에 대한 일반적인 아이디어가 있습니다. 하지만 NSAutoreleasePool이 필요한 이유를 이해하지 못합니다 : 간단한 프로그램에서 main()이 끝나면 모든 alloc'd 객체가 해제됩니다.

여기 NSAutoreleasePool을 갖는 다른 이유가 있습니까?

답변

3

메모리 관리 시스템이 작동하려면 autorelease 풀이 있어야합니다. 프로세스가 종료 될 때 OS가 모든 프로그램의 메모리를 정리할 것이기 때문에 [pool drain]은 틀림없이 불필요하다고 생각되지만, 명확성 (그리고 엄격한 정확성)을 위해 포함되어 있습니다.

여기서 가정은 autorelease 풀을 사용하는 코드를 추가한다는 것입니다. 그래서 그들은 단지 당신에게 타이핑을 저장하기를 희망합니다.

1

당신이 프로그램을 종료 할 때 메모리가 회수되지만, 프로그램이 끝나지 않고 (서버 또는 데몬) 며칠 동안 실행되고 자동 풀이없고 올바르지 않은 경우에는 어떻게 될까요? 너의 물건을 놓아 라. 그 때 무엇? - 까지 앱에서 계속 메모리를 소비합니다. 메모리가 부족하여 시스템이 다운됩니다.

자동 출시 풀이있는 이유는입니다.

관련 문제