- 只要出現(xiàn)內(nèi)存警告的時候,會第一時間執(zhí)行
AppDelegate的- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application方法, 可以在這個方法處理:清理內(nèi)存緩存、取消當(dāng)前所有的操作(比如:下載、網(wǎng)絡(luò)請求),舉例:SDWebImage的使用出現(xiàn)內(nèi)存警告的處理
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
// 1 清理內(nèi)存
// 清除類型為SDImageCacheTypeDisk:直接刪除,重新重新創(chuàng)建
// 清除類型為SDImageCacheTypeDisk:清除過期緩存,計算當(dāng)前緩存大小,和z設(shè)置的最大緩存數(shù)量比較,如果超出,那么會繼續(xù)刪除(按文件的先后順序)
// 默認的圖片過期時間:7天
[[SDWebImageManager sharedManager].imageCache clearWithCacheType:SDImageCacheTypeMemory completion:nil];
// 2 取消當(dāng)前所有的操作
[[SDWebImageManager sharedManager] cancelAll];
}
- 遇到內(nèi)存警告后,在
UIViewController中都有- (void)didReceiveMemoryWarning方法,來接受內(nèi)存警告的通知,所以也需要在這里進行處理,將沒有顯示的UIViewController的self.view置為nil,釋放內(nèi)存。
// 如果出現(xiàn)內(nèi)存警告,ios6.0之前,系統(tǒng)會自動清理視圖;ios6.0之后,系統(tǒng)不會再自動清理視圖,需要手動處理;
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.0) {
// 需要注意的是self.isViewLoaded是必不可少的,其他方式訪問視圖會導(dǎo)致它加載,在WWDC視頻也忽視這一點。
// 是否是正在使用的視圖
if (self.isViewLoaded && !self.view.window) {
// 目的是再次進入時能夠重新加載調(diào)用viewDidLoad函數(shù)。
self.view = nil;
// 釋放其他可復(fù)現(xiàn)的資源&&保存的數(shù)據(jù),eg:數(shù)據(jù)源數(shù)組...
}
}
}
Author
如果你有什么建議,可以關(guān)注我,直接留言,留言必回。