最近在做一個相冊類的應用,但是在內存方面一直出現這一些問題,原因就是有着大量圖片顯示和存取,這里整理一下查到的資料,列舉一下造成內存警告的潛在原因
1.imageName創建UIimage的時候實際上只是在Bundle內查找到文件名,然后把文件名返回,並沒有對文件驚醒讀取和解碼,當UIImage第一次顯示在屏幕的時候解碼方法才會被調用,並且會保存到一個全局緩存當中,且APP第一次退出或者受到內存警告的時候才會被清空。!!!
2.imageWithData同樣也不能避免緩存
3.如何避免緩存,把圖片用 CGContextDrawImage() 繪制到畫布上,然后把畫布的數據取出來當作圖片。
4.cell重用問題,老生常談,要注意的就是footer header的復用,
- (nullable __kindof UITableViewHeaderFooterView *)dequeueReusableHeaderFooterViewWithIdentifier:(NSString *)identifier
究其原因,一方面是相片本身大小,iphone相機返回的照片都在2M左右,而每個app如果內存超過20M就會爆出內存警告,解決辦法,壓縮圖片大小:
UIImageJPEGRepresentation(image1, kCompressionQuality)