因為公司的項目對圖片要求比較高,每個tab頁面都是各種大圖,所以對圖片的內存及時清理顯得特別的重要。
在項目中我使用了sdwebimage框架來加載網絡的大圖,提供給用戶可以隨時清理磁盤的button。但是在使用的過程中發現[[SDImageCache sharedImageCache] cleanDisk] 不起作用。
查看了sd的源碼,發現他在執行清理動作的時候,是要根據你設置的最大cacheAge(NSDate*expirationDate = [NSDatedateWithTimeIntervalSinceNow:-self.maxCacheAge];)來判斷是否要來做清理的動作的。而maxCacheAge是需要用戶自己設置修改,否則默認就是1周(7*24*60*60)。正常一周之內的圖片,都不會被清理掉。
所以可以通過設置maxCacheAge來實現最終的清理效果。
兩個思路:
1.如果你的app本身不需要保存圖片很久,你可以直接設置maxCacheAge為你可接受的最小時間。可以在appdelegate里,在didFinishLaunchingWithOptions里直接設置
2.如果你不希望影響設置maxCacheAge,那我采取的辦法是,在用戶主動要做 清理磁盤的動作時,設置maxCacheAge=0,然后在清理磁盤動作結束后,在重新設置回來。
[SDImageCache sharedImageCache].maxCacheAge=0;
[[SDImageCache sharedImageCache]cleanDisk];
在它的cleanDisk里修改
- (void)cleanDisk {
[selfcleanDiskWithCompletionBlock:^{
self.maxCacheAge= 60 * 60 * 24 * 30;
}];
}
原來:
- (void)cleanDisk {
[selfcleanDiskWithCompletionBlock:nil];
}