2009-09-14 5 views
0

내 iPhone 응용 프로그램은 장치에 배포 할 때 문제가 발생합니다. 주로 메모리 경고를 처리하지 않았기 때문입니다 (시뮬레이터에서는 문제가 없으며 4GB의 RAM이 내 컴퓨터에!). 문제는 없지만, 나는이 경고를보다 능숙하게 처리해야합니다 (덜 유감스럽게도 ...).didReceiveMemoryWarning/viewDidUnload가 출시 한 메모리는 어느 것입니까?

질문 : 런타임 릴리스는 어떤 메모리입니까? 단지보기 및 하위보기입니까? 나는 그것이 단지 이것들이라고 생각하지만 런타임이 내 컨트롤러의 객체 나 메모리를 역 참조하지 않도록하고 싶다. (보기에 없다.)

Subquestion : 뷰와 하위 뷰인 경우 뷰를 메모리로 다시 가져 오면 뷰가 올바른 데이터를 표시하는지 또는 내 뷰를 통해 자동으로 처리되는지 확인하기 위해 viewDidLoad에서 특별한 작업을 수행해야합니까? IBOutlet-s?

답변

2

이미지 데이터와 같이보기 또는 하위보기가 캐시 할 수있는 항목이 많습니다. 이것들은 제거 될 일종의 것들입니다. 애플리케이션을 플러시 할 수있는 특정 기능은 해당 콜백을 처리해야합니다.

그러나 이것은 사용자가 메모리를 누출하고 있거나 효율적이지 못하다는 것을 나타내는 것일 수 있습니다. CLANG 컴파일러의 정적 코드 분석기로 실행하는 것은 물론, 누수 도구가있는 계측기에서 앱을 실행할 가치가 있습니다. 또한 코드를 검사하여 필요하지 않은 메모리 블록 (예 : 더 많은 이미지를 압축 할 수 있는지 여부)을 확인하십시오.

3GS 또는 최신 iPod touch를 사용하기 전에 시스템 메모리는 128MB 하지만 응용 프로그램에서 사용할 수있는 약 25-30Mb 정도만 고려해야합니다.

+1

기억해야 할 핵심 사항은 런타임에서 아무 것도 공개하지 않는다는 것입니다. 삭제할 수있는 항목은 다시로드 할 수있는 데이터 (엄청난 히트없이), 이미지 등은 현재 표시되지 않지만 앱의 컨텍스트에서 결정하는 것은 사용자의 몫입니다. 또한 알림은 다음과 같습니다. 귀하의 애플 리케이션에 청소를 경고하고, 당신은 현재 필요하지 않은 메모리를 제거하는 책임이 있습니다. 무시되는 경우 '경고'로 인해 OS가 앱을 종료하게됩니다. – Kevin

+0

128MB와 25-30MB를 의미하지 않습니까? – mahboudz

+0

런타임이 장면 뒤에서 어떤 것도 내 보내지 않는다는 것을 알기 때문에 내 앱에 경고가 표시되지만 런타임/메모리 관리자가보기를 언로드합니다. 이것은 약간의 기억을 저장하지 않습니까? 또한 내 응용 프로그램은 7-8MB의 메모리를 소비 한 후에 이러한 경고를 켜고 끕니다. 누수 도구가 하나의 누수를 표시하지만 32 바이트만으로 심각한 문제는 아닌 것으로 추정됩니다. – mblackwell8

0

viewDidUnload와 didRecieveMemoryWarning은 자동으로 아무 것도 출시하지 않습니다. 이 두 가지 방법 모두를 재정의해야합니다.

일반적으로 viewDidUnload는 IB에서 생성되지 않은 뷰에서 아무 것도 해제해야하며 뷰를 다시로드 할 때 다시로드 할 수 있습니다.

그리고 didRecieveMemoryWarning은 시스템의 메모리가 부족한 경우 앱에 전송되는 메시지입니다. 앱에서이 메시지를 받으면 즉시 필요하지 않은 모든 것을 해제하거나 시스템에서 강제로 앱을 종료해야합니다.

관련 문제