에서 OSMemoryNotification.h ,
/*
** Threshold values for notifications
*/
typedef enum {
OSMemoryNotificationLevelAny = -1,
OSMemoryNotificationLevelNormal = 0,
OSMemoryNotificationLevelWarning = 1,
OSMemoryNotificationLevelUrgent = 2,
OSMemoryNotificationLevelCritical = 3
} OSMemoryNotificationLevel;
totoal 5 레벨의 메모리 경고 (-1,3).
메모리 수준 경고 설명과 관련하여 @KennyTM의 대답은 훌륭합니다.
PM과 다른 사람들에게 도움이 될 수있는 몇 가지 관련 사항을 추가하고 싶습니다.
메모리 수준 경고가 발생하면 어떻게해야합니까?
이러한 경고 중 하나를 수신하면 처리기 메서드는 불필요한 메모리를 즉시 확보하여 응답해야합니다. 예를 들어, UIViewController 클래스의 기본 동작은 해당 뷰가 현재 표시되지 않는 경우 해당 뷰를 제거하는 것입니다. 하위 클래스는 추가 데이터 구조를 제거하여 기본 동작을 보완 할 수 있습니다. 이미지 캐시를 유지하는 앱은 현재 화면에없는 이미지를 해제하여 응답 할 수 있습니다.
메모리 레벨 경고를 관찰하는 방법은 무엇입니까?
에서 http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
시스템이 앱에 메모리 부족 경고를 전달하면 즉시 응답하십시오. iOS는 사용 가능한 메모리 양이 안전 임계 값 아래로 떨어질 때마다 실행중인 모든 앱에 알립니다. (일시 중단 된 앱에 대해서는 알리지 않습니다.) 앱에서이 경고를 받으면 가능한 한 많은 메모리를 확보해야합니다. 이를 수행하는 가장 좋은 방법은 캐시, 이미지 개체 및 나중에 다시 만들 수있는 기타 데이터 개체에 대한 강력한 참조를 제거하는 것입니다.
UIKit은 다음을 포함하여 메모리 부족 경고를 수신하는 여러 방법을 제공합니다.
- 앱 대리자의 applicationDidReceiveMemoryWarning : 메서드를 구현합니다.
- 사용자 지정 UIViewController 하위 클래스에서 didReceiveMemoryWarning 메서드를 재정의합니다.
- UIApplicationDidReceiveMemoryWarningNotification 알림을 수신하려면 등록하십시오.
앱의 메모리 공간을 줄이는 방법은 무엇입니까?
- 메모리 누수를 제거합니다.
- 리소스 파일을 가능한 한 작게 만드십시오.
- 대용량 데이터 세트에는 Core Data 또는 SQLite를 사용하십시오.
- 리소스를 느리게로드합니다.
- Thumb 옵션을 사용하여 프로그램을 빌드하십시오.
자세한 내용은 http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html 을 참조하십시오.
메모리를 현명하게 할당하는 방법은 무엇입니까?
- 자동 해제 된 객체 사용 줄이기 : 자동 참조 계수 (ARC)를 사용하면 객체 를 할당 / 초기화하고 컴파일러가 적절한 시간에이를 해제하도록하는 것이 좋습니다. 이는 과거에 현재 메서드의 범위를 벗어나는 것을 방지하기 위해 자동 해제 된 임시 개체의 경우에도 마찬가지입니다.
- 리소스에 크기 제한 적용 : 작은 리소스 파일이로드되는 경우 큰 리소스 파일을로드하지 마십시오. 고해상도 이미지를 사용하는 대신 iOS 기반 장치에 적합한 크기를 사용하십시오. 대용량 리소스 파일을 사용해야하는 경우 지정된 시간에 필요한 파일 부분 만로드하는 방법을 찾으십시오. 예를 들어, 전체 파일을 메모리로로드하는 대신 mmap 및 munmap 함수를 사용하여 파일의 일부를 메모리 안팎으로 매핑합니다. 파일을 메모리에 매핑하는 방법에 대한 자세한 내용은
- 제한되지 않은 문제 집합 방지 : 제한되지 않은 문제 집합은 계산하는 데 임의로 많은 양의 데이터가 필요할 수 있습니다. 세트에 사용 가능한 것보다 더 많은 메모리가 필요한 경우 앱에서 계산을 완료하지 못할 수 있습니다. 앱은 가능한 한 이러한 세트를 피하고 알려진 메모리 제한 문제를 해결해야합니다.