2010-02-11 7 views
9

iPhone 시뮬레이터에서 앱을 종료 할 때 dealloc 메서드가 호출되지 않는 것 같은 지난 몇 주 동안 CocoaTouch가 작동하는 방식을 배우는 동안 나는 눈치 채 셨습니다. 이제 공평하게하기 위해서 콘솔에 인쇄 할 수있는 문을 NSLog에 넣기 만하면됩니다. 내 질문은 :iPhone에서 dealloc이 호출됩니까?

  1. 는 콘솔에 반향 내 NSLog의 중지 응용 프로그램 종료시 엑스 코드에서 시뮬레이터 차단합니까?

  2. dealloc은 앱이 종료 되었기 때문에 최적화 도구로 호출되지 않습니까?

  3. 앱이 실제 iPhone 하드웨어에서 실행될 때 dealloc이 호출 될까요?

+1

Mac OS X에서도 앱이 종료되면 'dealloc'이 호출되지 않습니다. 사용중인 메모리는 어쨌든 OS에서 회수합니다. – dreamlax

답변

10

docs은 운영 체제가 응용 프로그램이 모든 메모리 청크를 천천히 보류하는 것보다 한꺼번에 메모리를 회수하는 것이 더 효율적이라고 말합니다. 이러한 이유로 dealloc은 많은 수의 개체로 전송되지 않을 수 있습니다. 의 경우 이유 때문에 희소 한 리소스를 관리하지 않는 것이 중요합니다. dealloc. 부족한 리소스를 정리하려면 응용 프로그램 대리인이 applicationWillTerminate:에 응답하도록하고 거기에서 정리 작업을 수행하는 것이 좋습니다.

- (void) applicationWillTerminate:(NSApplication/UIApplication *) anApp 
{ 
    [scarceResourceManager relinquishScarceResources]; 
} 
+3

무디게하기 : 앱이 종료 될 때'free()'또는'-deallocate'를 호출하는 CPU 사용주기는 자원의 완전하고 완전한 낭비입니다. Mac OS X과 iPhone은 각각의 프로세스가 독립적으로 유지되는 메모리 모델을 사용합니다. 프로세스가 종료되면 해당 응용 프로그램과 관련된 * 모든 * 메모리 리소스가 한 번에 모두 회수됩니다. – bbum

+0

dreamlax와 bbum, 잠시 동안 나를 괴롭 혔던 그 물건에 감사해라, 많이 인정 받았다. – fuzzygoat

+0

dreamlax와 bbum 모두 옳습니다. 종료시 메모리를 확보하는 것은 낭비이지만 중요한 것은 메모리를 해제하는 것 외에는 종료 할 때 많은 일이 있다는 것입니다. 이 게시는 이러한 경우에 유용합니다. – Eonil

0

Dreamlax에서 이미 말했듯이 시스템은 응용 프로그램이 종료되자 마자 모든 메모리를 회수합니다. 따라서 응용 프로그램이 종료 할 때 dealloc을 호출하는 용도는 없습니다. Mac OS X의 표준 동작이며, 시뮬레이션 된 또는 "실제"iPhone에서 다를 것입니다.

관련 문제