內(nèi)存分析
靜態(tài)分析 Analyze
動(dòng)態(tài)分析 Instruments
- 可以查看內(nèi)存分配情況Allocations
- 可以查看某個(gè)操作后內(nèi)存暴漲的情況。
- 可以查看是否內(nèi)存泄漏 Leaks。
在BaseViewController的dealloc方法里打印一下,看看離開某個(gè)頁面后控制器是否被銷毀了。
內(nèi)存優(yōu)化
- cell復(fù)用,header、footer復(fù)用。
- 盡量把view設(shè)置不透明。
- 減少視圖的層級。
- 加載圖片的方式
- UIImage imageNamed: ImageAssets 用于多個(gè)地方重復(fù)使用,加載時(shí)會(huì)緩存在內(nèi)存里。
- UIImage imageWithContentsOfFile 一般用在圖片數(shù)據(jù)很大,一般不需要多次使用的情況。不會(huì)長期存在內(nèi)存里。
- 不要阻塞主線程。耗時(shí)操作放在后臺(tái)進(jìn)行,如網(wǎng)絡(luò)請求,數(shù)據(jù)庫讀寫。dispatch_get_main_queue dispatch_get_global_queue
- 圖片大小最好和UIImageView的大小相同。在運(yùn)行中縮放圖片是很耗費(fèi)資源的。如果圖片是網(wǎng)絡(luò)獲取的,可以在下載完成后,在后臺(tái)線程縮放一次,然后在賦值。
- 懶加載。
- 緩存,緩存圖片SDWebImage,緩存行高。NSCache系統(tǒng)回收內(nèi)存的時(shí)候它會(huì)自動(dòng)刪掉它的內(nèi)容。
- NSDateFormatter和NSCalendar初始化很慢,可以把它作為屬性或者成員變量,只在第一次用到的時(shí)候初始化一次。
- 避免反復(fù)處理數(shù)據(jù)。比如tableView最好用array。
- 使用Shadow Path來畫陰影
- 優(yōu)化TableView
- 正確復(fù)用cell
- 視圖盡量不透明
- 避免漸變,圖片縮放。
- 緩存行高
- 異步加載,緩存請求結(jié)果
- 使用shadowPath來畫陰影
- 減少視圖層級
- 使用正確的數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)數(shù)據(jù),減少數(shù)據(jù)處理
- 使用rowHeight sectionHeaderHeight sectionFooterHeight來設(shè)定固定的高,不要用delegate
- 使用正確的數(shù)據(jù)存儲(chǔ)
NSUserDefaults適合小數(shù)據(jù)。
plist 每次會(huì)讀取整個(gè)文件到內(nèi)存里。
NSCoding對象歸檔 也會(huì)讀取整個(gè)文件到內(nèi)存。
大的數(shù)據(jù)存儲(chǔ)用SQLite或Core Data。 - for循環(huán)里創(chuàng)建對象耗內(nèi)存時(shí)用Autorelease Pool