จาก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: เมธอดของผู้แทนแอปของคุณ
- แทนที่เมธอด didReceiveMemoryWarning ในคลาสย่อย UIViewController ที่คุณกำหนดเอง
- ลงทะเบียนเพื่อรับ UIApplicationDidReceiveMemoryWarningNotificationnotification
วิธีลดรอยเท้าความจำของแอป
- กำจัดการรั่วไหลของหน่วยความจำ
- ทำให้ไฟล์ทรัพยากรมีขนาดเล็กที่สุด
- ใช้ Core Data หรือ SQLite สำหรับชุดข้อมูลขนาดใหญ่
- โหลดทรัพยากรอย่างเฉื่อยชา
- สร้างโปรแกรมของคุณโดยใช้ตัวเลือก Thumb
รายละเอียดที่http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
วิธีการจัดสรรหน่วยความจำอย่างชาญฉลาด?
- ลดการใช้อ็อบเจ็กต์ที่ปล่อยอัตโนมัติของคุณ : ด้วยการนับการอ้างอิงอัตโนมัติ (ARC) จะเป็นการดีกว่าที่จะจัดสรร / เริ่มต้นอ็อบเจ็กต์และปล่อยให้คอมไพเลอร์ปล่อยอ็อบเจ็กต์ให้คุณในเวลาที่เหมาะสม สิ่งนี้เป็นจริงแม้กระทั่งสำหรับวัตถุชั่วคราวที่ในอดีตคุณอาจมีการปล่อยอัตโนมัติเพื่อป้องกันไม่ให้พวกมันอยู่เกินขอบเขตของวิธีการปัจจุบัน
- กำหนดขีด จำกัด ขนาดของทรัพยากร : หลีกเลี่ยงการโหลดไฟล์ทรัพยากรขนาดใหญ่เมื่อไฟล์มีขนาดเล็กลง แทนที่จะใช้ภาพความละเอียดสูงให้ใช้ภาพที่มีขนาดเหมาะสมสำหรับอุปกรณ์ที่ใช้ iOS หากคุณต้องใช้ไฟล์ทรัพยากรขนาดใหญ่ให้ค้นหาวิธีโหลดเฉพาะส่วนของไฟล์ที่คุณต้องการในช่วงเวลาใดเวลาหนึ่ง ตัวอย่างเช่นแทนที่จะโหลดไฟล์ทั้งหมดลงในหน่วยความจำให้ใช้ฟังก์ชัน mmap และ munmap เพื่อแมปส่วนต่างๆของไฟล์เข้าและออกจากหน่วยความจำ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการแมปไฟล์ลงในหน่วยความจำ
- หลีกเลี่ยงชุดปัญหาที่ไม่ถูกผูกไว้: ชุดปัญหาที่ไม่มีขอบเขตอาจต้องใช้ข้อมูลจำนวนมากในการคำนวณโดยพลการ หากชุดนั้นต้องการหน่วยความจำมากกว่าที่มีอยู่แอปของคุณอาจไม่สามารถทำการคำนวณให้เสร็จสมบูรณ์ได้ แอปของคุณควรหลีกเลี่ยงการตั้งค่าดังกล่าวทุกครั้งที่ทำได้และแก้ไขปัญหาเกี่ยวกับขีด จำกัด หน่วยความจำที่ทราบ