是否有一種技術可以通過在分配內存之前測試內存的可用性來避免不必要的內存消耗?我知道一般的iOS方法是優化內存使用情況並在必要時響應didReceiveMemoryWarning,但有時不會削減它。iOS:在分配對象之前檢測內存限制
在我的用例(圖像處理)中,我使用UIGraphicsBeginImageContext()爲一個(可能)大的圖像分配空間。如果圖片太大,我最終會收到didReceiveMemoryWarning。但是,在這一點上已經太晚了:從用戶體驗的角度來看,最好防止用戶從這麼大的圖像開始工作;這會更有意義地說,「對不起,圖片尺寸太大了!做點別的!」在創造它之前,比說「Ooops!現在崩潰!」
我在查詢可用內存和/或全部物理內存時發現了一些SO線程,但是使用它們是一個混亂且不可靠的解決方案:無法告訴操作系統實際上將允許您使用多少內存給定時間點,不管有多少空閒。
基本上,我想這些語義:(在 「雨燕的Java-ESE」)
try {
UIGraphicsBeginImageContext(CGRect(x: reallyBig, y: reallyBig))
}
catch NotEnoughMemoryException {
directUserToPickSmallerImage()
}
// The memory is mine; it's OK to use it
continueUsingBigImage()
是否有iOS中這樣的方法?
重新例外:在iOS中,例外是爲編程不可恢復的錯誤而保留的。從技術上講,跨棧幀恢復存在問題。你可以嘗試使用'NSData dataWithBytes:length:'預先檢查並檢查是否爲零。 – zaph 2014-09-25 19:56:29
哦,我沒有字面意思是拋出一個異常 - 我只是指成功/即時失敗語義。 (對不起!這太讓人困惑了......)NSData的想法可能會奏效,但它需要使用你無法快速完成的malloc。 – 2014-09-25 20:18:10
也許更好的方法是限制你的應用程序處理最大大小和位深度。來自當前設備相機的最大圖像看起來像是一個合理的限制。 – danh 2014-09-25 20:25:43