2

저는 비교적 오랜 시간 동안 활성화되어 있고 여러 화면을로드 할 수있는 탐색 컨트롤러 기반 응용 프로그램을 보유하고있어 업무 프로세스 중 일부를 다시 방문합니다 (비즈니스 응용 프로그램). 화면을 누르면 메모리가 할당됩니다. 내가 돌아갈 때 (팝) 나는 기억을 잃지 않도록해야한다.탐색 컨트롤러 기반 앱에서의 메모리 사용 계산;

이제 누출은 깨끗한 슬레이트가 있습니다. 메모리 누출이 없으며 10.6 정적 분석 기능으로 수행하기가 어렵지 않고 계측기를 사용하여 확인했습니다. 수동으로 확인하면, viewWillDisappear에서 viewWillAppear에 할당 된 모든 것을 해제한다고 확신합니다. viewDidUnload의 viewDidLoad에 할당 된 모든 것. dealloc에서 다르게 할당 된 모든 것.

NSZombiesEnabled를 개발에 사용했지만 확실히 활성화되지 않았습니다.

그러나 개체 할당에서 실행하면 메모리 사용량이 증가하는 것을 볼 수 있습니다. 새로운 시야에 들어서 자 기억이 증가하지만 뒤로 항해 할 때 같은 양만큼 감소하지는 않습니다. 이것은 단순히 시스템이 즉시 할당을 해제하지 못하는 경우도 있습니다. 이 동작은 모든보기에서 볼 수 있습니다.

이 메모리를 분리하는 데 사용할 수있는 기술은 무엇입니까? 모든보기 후에 일부 기준선으로 돌아가는 응용 프로그램을 목표로해야합니까? 코어 데이터와 같은 하위 시스템에서 사용되는 메모리보고를 분리하려면 어떻게해야합니까? 객체를로드하는 데 장애가 발생하여 명시 적으로 조작하지 않아야하며 전체 제어 권한이있는 코드를 분리해야합니까?

답변

0

네비게이션 컨트롤러의 메모리 사용량은 뷰를 누를 때 커집니다. 코어 데이터를 사용하는 경우보기를 밀거나 팝 할 때마다 코어 데이터에 전체 응용 프로그램의 상태를 유지할 수 있습니다. 이 방법은 아무 것도 잃지 않을 것입니다. navigationController는 viewController의 메모리를 관리하므로 iPhones 메모리를 초과하면 viewController 할당을 해제합니다. 핵심 데이터는 메모리를 매우 공격적으로 관리하므로 좋은 방법입니다. 도입 내가 대신 자신의 롤 노력의 프레임 워크의 메모리 관리를 활용할 생각이 방법으로

잠재적으로 긴 기간 메모리 버그 :

내가의 ViewController 당 법인과 같은 뭔가를 이동 한 것 로드 된 컨텍스트를 저장하는 엔티티 이 방법을 사용하면 프레임 워크가 viewController를 할당 해제했는지 확인한 다음 navController 스택을 복원 할 수 있습니다.

희망이 :)

+0

감사를 고려 적어도 것이었다 - 내가 대답은 "그냥 얌전하게"되었다 두려워 ...하지만 메모리가 그렇게 증가보고 잘못 느낀다. –

+0

나는 알고있다. Im은 나의 첫번째 "큰"응용 프로그램을하고 있고 나는 정말로 아이폰이 부주의 한 메모리 관리의 관점에서 취할 수있는 것을 걱정했다. 1400 - 16.000 개의 항목 목록을 가져 와서 한 번에 7-8 개의 탐색 컨트롤러에 맞춤 UITableView를 스태킹하고 scrollView/pageControl 효과를 위해 최대 20 개의 페이지를 사전로드하고 세미 복잡한 핵심 데이터 설정을 사용하고 웹 서비스의 거대한 xml 파일을 구문 분석합니다. 다른 스레드에서. 나는 그것이 메모리 관리의 악몽이라고 생각했다 :) 거의 끝났다. 그리고 메모리는 결코 3 MB 이상으로 가지 않는다. 1G 아이폰은 약 20MB, 3G S는 몇 배나 더 많이 가지고 있다고 생각합니다. – RickiG

+0

계속 늘어나고 있다고 말하면 정지하기 전에 얼마나 멀리 MB로 올라갈까요? – RickiG

관련 문제