2011-01-10 10 views
5

내 응용 프로그램은 전체 수명주기 동안 필요한 임시 파일을 만듭니다. 결국 파일을 처리해야하므로 장치에서 공간을 차지하지 않습니다. 애플리케이션을 종료 할 때 삭제할 수 있다고 생각했지만 멀티 태스킹이 도입 된 이후 라이프 사이클은 이전처럼 단순하지 않았습니다. 내 주요 질문은 : 응용 프로그램이 백그라운드로 이동하여 나중에 죽게되면 applicationWillTerminate:을 수신합니까? 아니면 그냥 기억에서 지워졌습니까?백그라운드에서 응용 프로그램이 종료 될 때 정리를 수행하는 방법은 무엇입니까?

응용 프로그램이 백그라운드로 이동하면 정리 작업을 수행 할 수 없으므로 작업이 진행되는 동안 백그라운드로 처리 될 수 있으며 전경으로 돌아 오면 임시 파일이 필요합니다. 나는 시동시 파일을 지울 수 있다고 생각하지만 어쨌든 applicationWillTerminate: 동작에 관심이 있습니다.

+0

iPhone 4에서 게임을 만들 때도 동일한 문제가 발생했습니다. 응용 프로그램이 applicationWillTerminate를 수신하지 못했습니다. 사용자가 앱을 종료하고 전화를 저장할 수 없었습니다. 사용자 위치. 하지만 귀하의 경우에는 포인터가 가리키고 있지 않으면 메모리가 정리되고 임시 파일이 자동으로 삭제되므로 메모리 누수에 대해 걱정할 필요가 없다고 생각합니다. – Robin

+0

메모리 누수가 아닌 임시 파일에 대해 걱정하고 있습니다. 그러나 AFAIK, tmp 폴더는 iTunes와의 동기화 중에 지워집니다. –

답변

5

아니요, applicationWillTerminate:은 멀티 태스킹 지원 iOS 4 기기에서 호출되지 않습니다. 앱이 종료되면 일반적으로 기기의 메모리가 부족한 것입니다. 따라서 이 실행 되더라도이라고 말하면 어쨌든 작업을 완료 할 수있는 충분한 메모리가 있다는 것은 아닙니다.

애플은 앱이 백그라운드로 들어갈 때 정리할 것을 권장합니다. 몇 초가 걸리는 경우 여분의 시간을 요청할 수 있습니다 (이는 모든 응용 프로그램에 열려있는 몇 가지 멀티 태스킹 시나리오 중 하나입니다).

다른 옵션은 작업이 완료 될 때마다 (응용 프로그램이 시작될 때마다) 또는 응용 프로그램이 시작될 때 정리하는 것입니다. 다른 순열이있을 것 같아요 ...

+0

응용 프로그램 종료시 정리가 쉬웠지만 다른 옵션이 없으면 작업이 끝난 후에 정리할 것입니다. 감사! – zoul

1

인터넷에서는 응용 프로그램이 백그라운드에서 종료되는 동안 applicationWillTerminate :가 호출되지 않는다고 말합니다. 다른 방법은 일부 정보 (NSUserDefaults 등)를 저장하는 것입니다. 임시 파일을 열었습니까? 시작한 후에는 해당 파일이 남아 있는지 확인하고 삭제하십시오. 또한, iOS가 애플리케이션을 죽이는 방법을 알아낼 수 있습니다 (단, 신호를 보내서 처리하는 것으로 알고 있지만 잘 모르겠습니다). 앱에 신호 처리기를 추가하십시오.

관련 문제