Gönderen OSMemoryNotification.h ,
/*
** Threshold values for notifications
*/
typedef enum {
OSMemoryNotificationLevelAny = -1,
OSMemoryNotificationLevelNormal = 0,
OSMemoryNotificationLevelWarning = 1,
OSMemoryNotificationLevelUrgent = 2,
OSMemoryNotificationLevelCritical = 3
} OSMemoryNotificationLevel;
toplam 5 seviye hafıza uyarısı (-1,3).
Hafıza Seviyesi uyarı açıklamasıyla ilgili olarak, @ KennyTM'nin cevabı mükemmel.
PM ve diğerlerine yardımcı olabilecek birkaç ilgili nokta eklemek istiyorum.
Bellek Seviyesi Uyarısı alırken ne yapmalısınız?
Bu uyarılardan herhangi birini aldığınızda, işleyici yönteminiz, gereksiz belleği hemen boşaltarak yanıt vermelidir. Örneğin, UIViewController sınıfının varsayılan davranışı, bu görünüm o anda görünür değilse, görünümünü temizlemektir; alt sınıflar, ek veri yapılarını temizleyerek varsayılan davranışı tamamlayabilir. Görüntü önbelleğini tutan bir uygulama, o anda ekranda olmayan herhangi bir görüntüyü serbest bırakarak yanıt verebilir.
Hafıza Seviyesi uyarısı nasıl gözlemlenir?
Gönderen http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
Sistem, uygulamanıza düşük bellek uyarısı gönderdiğinde hemen yanıt verin. iOS, boş bellek miktarı güvenli bir eşiğin altına düştüğünde çalışan tüm uygulamaları bilgilendirir. (Askıya alınan uygulamaları bilgilendirmez.) Uygulamanız bu uyarıyı alırsa, olabildiğince fazla bellek boşaltması gerekir. Bunu yapmanın en iyi yolu, önbelleklere, görüntü nesnelerine ve daha sonra yeniden oluşturulabilecek diğer veri nesnelerine yönelik güçlü referansları kaldırmaktır.
UIKit, aşağıdakiler dahil olmak üzere düşük bellek uyarılarını almanın birkaç yolunu sağlar:
- ApplicationDidReceiveMemoryWarning: uygulamanızın temsilcisinin yöntemini uygulayın.
- Özel UIViewController alt sınıfınızda didReceiveMemoryWarning yöntemini geçersiz kılın.
- UIApplicationDidReceiveMemoryWarningNotification bildirimini almak için kaydolun.
Uygulamanızın Bellek Ayak İzini Nasıl Azaltabilirsiniz?
- Bellek sızıntılarını ortadan kaldırın.
- Kaynak dosyalarını olabildiğince küçük yapın.
- Büyük veri kümeleri için Core Data veya SQLite kullanın.
- Kaynakları tembel olarak yükleyin.
- Başparmak seçeneğini kullanarak programınızı oluşturun.
Ayrıntılar http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html adresinde
Bellek akıllıca nasıl tahsis edilir?
- Otomatik yayımlanan nesnelerin kullanımınızı azaltın : Otomatik referans sayma (ARC) ile nesneleri tahsis etmek / başlatmak ve derleyicinin bunları sizin için uygun zamanda serbest bırakmasına izin vermek daha iyidir. Bu, geçmişte mevcut yöntemin kapsamı dışında yaşamalarını önlemek için otomatik olarak yayımlamış olabileceğiniz geçici nesneler için bile geçerlidir.
- Kaynaklara boyut sınırlamaları uygulayın : Daha küçük bir kaynak dosyası yapacağı zaman büyük bir kaynak dosyası yüklemekten kaçının. Yüksek çözünürlüklü bir görüntü kullanmak yerine, iOS tabanlı cihazlar için uygun boyutta bir görüntü kullanın. Büyük kaynak dosyaları kullanmanız gerekiyorsa, herhangi bir zamanda dosyanın yalnızca ihtiyacınız olan bölümünü yüklemenin yollarını bulun. Örneğin, tüm dosyayı belleğe yüklemek yerine, dosyanın bölümlerini belleğe ve belleğin dışına eşlemek için mmap ve munmap işlevlerini kullanın. Dosyaları belleğe eşleme hakkında daha fazla bilgi için.
- Sınırsız problem setlerinden kaçının : Sınırsız problem setleri, hesaplamak için keyfi olarak büyük miktarda veri gerektirebilir. Set, mevcut olandan daha fazla bellek gerektiriyorsa, uygulamanız hesaplamaları tamamlayamayabilir. Uygulamalarınız mümkün olduğunda bu tür kümelerden kaçınmalı ve bilinen bellek sınırlarına sahip sorunlar üzerinde çalışmalıdır.