나는 크래시 및 메모리 누수를 추적하는 개발 과정에 있습니다. 전략으로 NSLog 메시지 나 알림 중 일부를 didReceiveMemoryWarning:
에 넣으시겠습니까? 이 방법에 대한 문서는 드문 드문합니다. 충돌이 일어나기 전에 UIViewController가 해당 메소드를 트리거한다고 말하는 것이 정확합니까? 인스 트루먼 트와 함께 나아 가기 전의 출발점입니까?iOS : didReceiveMemoryWarning의 유용성 :
답변
OK, 몇 가지 참고 사항 :
- didReceiveMemoryWarning 메모리 부족 충돌하기 전에 호출됩니다. 다른 충돌은 없습니다. 경고를 올바르게 처리하고 메모리를 비우면 메모리 부족 상태가 발생하지 않고 충돌을 피할 수 있습니다.
- 하드웨어 메뉴의 시뮬레이터에서 수동으로 메모리 경고를 트리거 할 수 있습니다. didReceiveMemoryWarning 처리를 테스트하려면이 작업을 수행하는 것이 좋습니다.
- 인스트루먼트는 누출을 디버그하는 데 도움이됩니다 (모두는 아니지만). 실제로 크래시에는 유용하지 않습니다.
- 아니요, 개인적으로 NSLog를 사용하지 않습니다. 디버깅 할 때 메모리 경고를 중단하기 만합니다.
didReceiveMemoryWarning의 목적은 충돌을 피하기 위해 메모리 또는 팝업 뷰를 비울 기회를 제공하는 것입니다. 사용자가 수행하는 작업에 따라 달라 지므로 예측할 수없는 시점에서 수신하지 못합니다. 예를 들어, 사용자가 iPod을 듣고 있다면 사용 가능한 메모리가 적어지고 빨리 수신하게됩니다.
일반적으로 대략 8MB의 RAM이 있어야합니다. 당신이 가까이 오면 당신은 사건이 일어날 것을 기대할 수 있습니다. 의도적으로 많은 RAM을 사용한다면 그것에 대해 뭔가 할 계획이 있어야합니다.
업데이트는 아이폰 OS 6으로 , UIViewController
보기는 더 이상 메모리 경고에 대한 응답으로 언로드되지 않습니다. 대신 didReceiveMemoryWarning
이 호출 될 때 합리적으로 재생성 할 수있는 모든 리소스 (예 : 캐시 된 데이터)를 공개하기 위해 최선을 다하십시오.
업데이트
나는 성난 청년이었을 때 원래의 대답을 적었습니다. 시대가 바뀌었고 기본적으로 잘못되었습니다.
단일보기 컨트롤러가 있고 메모리 경고를받는 앱이 있다면 할 수있는 일이 많지 않습니다. 그러나 모두 언로드 할 수 있기 때문에 여러 개의보기 컨트롤러가있는 경우 상황이 극적으로 바뀝니다. 실제로 [UIViewController didReceiveMemoryWarning]
은 보이지 않는 뷰를 언로드하여 올바른 방향으로 안내합니다 (깜짝!). frontmost view 컨트롤러가 닫히면 기본 뷰가 다시로드되고 내부적으로 앱이 완전히 재부팅되었을지라도 대부분 사용자는 지연을 인식해야합니다.
이것은 쉽게 수정할 수있는 세부 정보가 아니므로 처음부터 메모리 사용을 염두에두고 멀티 뷰 프로그램을 완전히 언로드 가능한 UIViewController
조각으로 디자인해야합니다. 실제로 메모리 경고 기능을 사용하기 위해 코드를 시뮬레이터와 호환되도록 유지하는 것이 중요합니다.
메모리가 풍부하면 아무 것도로드되지 않고 모든 것이 부드럽고 매끄 럽습니다. 메모리가 낮 으면 더 느리게 작동하지만 계속 작동합니다. 이제는 유한 메모리 문제에 대한이 솔루션이 이상적이라고 말하고 싶습니다.
당신이 당신의 OpenGL을 누설하지 않으려는 경우viewDidLoad
,
viewDidUnload
및 이
viewWillUnload
(iOS5를가 유용한 상태를 언로드하는보기를 요구하는 경우
UIViewController
방법은 여전히, 예를 존재 과부하,이 메모리 재주를 활용하려면 텍스처 & 렌더링 버퍼, iOS4에서
didReceiveMemoryWarning
을 오버로드하고 뷰의 가시성을 추적하여이를 시뮬레이션 할 수 있습니다.
ORIGINAL, 더 담즙 답변
didReceiveMemoryWarning
절대적으로 쓸모가 없다.
메모리를 확보해도 (심지어 모든 것) 당신이 살해 당할 것이라는 보장은 없습니다. 그것은 일반적으로 2.X/3.0과 같이 작동 나의 쓰라린 경험에
는 :
mediaserverd는
이 내 응용 프로그램이
불행하게도 살해됩니다
메모리의 무리 누수 사신은 mediaserverd를 죽이는 것을 결코 생각하지 않습니다.그래서 메모리 사용량 네 잘못이 아닌 경우, 당신이 정말로 단지 두 가지 선택이있어 :
재부팅 사용자에게
(사용자가 당신의 잘못입니다 가정을 해치는 리뷰를 쓴다)- 범인의 충돌 (mediaserverd 자주 할것!) 희망
시간이 행진합니다. viewDidUnload는 이제 "메모가 메모리 부족 상태에서 더 이상 제거되지 않으므로이 메서드는 호출되지 않습니다."라는 메모와 함께 더 이상 사용되지 않습니다. 및 "iOS 6 이상에서는보기 컨트롤러에서보기 및 기타 개체에 대한 참조를 지울 필요가 없습니다."- [출처] (https://developer.apple.com/reference/uikit/uiviewcontroller/1621383-viewdidunload?language=objc) – jk7
전일에이 답변을 업데이트 할 생각이었습니다! –
사용자가 당신이 당신의 dispos에서 아주 작은 메모리가 열리지 일부 응용 프로그램을두면 al. 그래서 때때로 didReceiveMemoryWarning
은 1MB의 사용 후에 만 시스템에서 호출 할 수 있습니다.
시스템은 모든 뷰 컨트롤러에서이 메서드를 호출합니다. 각 뷰 컨트롤러에 NSLog를두면 알 수 있습니다.
그러면 자동으로 viewDidUnload
메서드가 모든 뷰 컨트롤러에서 시스템에 의해 호출됩니다 (dealloc
아님). 따라서 할당 해제 명령을 모두 거기에 넣어야합니다.
앱이 복잡하면 잘 관리하기 전에 많은 충돌이 발생하므로 많은 실험을해야합니다.
- 1. applicationDidReceiveMemoryWarning, didReceiveMemoryWarning의 차이점은 무엇입니까?
- 2. NHibernate - 유용성
- 3. JSunit 유용성
- 4. 신호 NaN의 유용성?
- 5. 이미지 업로드 프로세스 유용성
- 6. jQuery 코어 확장의 유용성
- 7. Cython 속도 향상과 유용성
- 8. 뒤로/앞으로 버튼과 유용성
- 9. 익명 함수 유용성
- 10. Nielson의 유용성 척도
- 11. 자동화 된 검사기 객체, 유용성?
- 12. 유용성 전쟁 : 디자이너 대 개발자
- 13. Silverlight - 알림 유용성 모범 사례
- 14. 게시 날짜 유용성 및 아키텍처
- 15. 부분 페이지 스크롤의 유용성 의미
- 16. 전체 텍스트 검색 - 순위의 유용성
- 17. 응용 프로그램 데이터 저장을위한 applicationDidEnterBackground의 유용성
- 18. 웹 유용성 : 알림/알림 -주의를 끄는 방법?
- 19. 유용성/UI 디자인/UX 등 - 프로젝트 문서화
- 20. Microsoft 데이터 액세스 응용 프로그램의 유용성
- 21. do while 루프를 사용하는 코드의 유용성
- 22. "암호화와 함께"SQL 서버의 유용성 성명
- 23. 파티션간에 데이터베이스 파일과 트랜스 로그를 분리하는 유용성
- 24. 기존의 "메뉴"막대가없는 응용 프로그램의 유용성
- 25. ios
- 26. iOS 프로젝트 용 XMLRPC-iOS
- 27. 콘텐츠 편집기의 유용성 : Drupal 또는 PHP 프레임 워크?
- 28. 스윙 : 다른 앱에서 포커스를 벗어남 (OS X의 유용성)
- 29. 복도 유용성 테스트 : 실제로 얼마나 많은 UI를 실제로 만들었습니까?
- 30. 웹 응용 프로그램에서 양식 작성/저장시 유용성 문제
안녕하세요. AirSource, 'Simulator -> Hardware -> Simulate Memory Warning'이란 무엇입니까? 클릭 할 때마다 "받은 가상 메모리 경고"라는 메시지 만 표시됩니다. 콘솔에. 어떻게 문제를 '내뿜는데'그것을 사용합니까? 감사. – lionfly
@lionfly - 메모리 경고에 대한 응답으로 최대한 많은 메모리를 확보해야합니다. 메모리 경고를 시뮬레이트하면 해당 코드 경로를 검사 (및 디버그) 할 수 있습니다. –