給大家總結(jié)一些常用的內(nèi)存優(yōu)化:
1肛冶、用ARC管理內(nèi)存
2敷扫、在正確的地方使用 reuseIdentifier
3摆昧、盡量把views設(shè)置為透明
4、避免過于龐大的XIB
5峭咒、不要阻塞主線程
6税弃、在ImageViews中調(diào)整圖片大小。如果要在UIImageView中顯示一個(gè)來自bundle的圖片凑队,你應(yīng)保證圖片的大小和UIImageView的大小相同则果。在運(yùn)行中縮放圖片是很耗費(fèi)資源的,特別是UIImageView嵌套在UIScrollView中的情況下漩氨。如果圖片是從遠(yuǎn)端服務(wù)加載的你不能控制圖片大小西壮,比如在下載前調(diào)整到合適大小的話,你可以在下載完成后才菠,最好是用background
thread茸时,縮放一次,然后在UIImageView中使用縮放后的圖片赋访。
7可都、選擇正確的Collection。
Arrays: 有序的一組值蚓耽。使用index來lookup很快渠牲,使用value lookup很慢, 插入/刪除很慢步悠。
Dictionaries: 存儲(chǔ)鍵值對(duì)签杈。 用鍵來查找比較快。
Sets: 無序的一組值鼎兽。用值來查找很快答姥,插入/刪除很快。
8谚咬、打開gzip壓縮鹦付。app可能大量依賴于服務(wù)器資源,問題是我們的目標(biāo)是移動(dòng)設(shè)備择卦,因此你就不能指望網(wǎng)絡(luò)狀況有多好敲长。減小文檔的一個(gè)方式就是在服務(wù)端和你的app中打開gzip郎嫁。這對(duì)于文字這種能有更高壓縮率的數(shù)據(jù)來說會(huì)有更顯著的效用。
iOS已經(jīng)在NSURLConnection中默認(rèn)支持了gzip壓縮祈噪,當(dāng)然AFNetworking這些基于它的框架亦然泽铛。容易被忽略的內(nèi)存優(yōu)化如下:
1.View的渲染是很吃CPU性能和內(nèi)存的,所以更多的View渲染是特別容易消化內(nèi)存和cpu辑鲤,特別是我們?cè)偈褂肬IScrollView時(shí)盔腔,多個(gè)Subview 時(shí) 我們可以適當(dāng)?shù)?把subview 進(jìn)行重用。
2.懶加載月褥,也稱延遲加載铲觉,說的通俗一點(diǎn),就是在開發(fā)中吓坚,當(dāng)程序中需要利用的資源時(shí)撵幽。在程序啟動(dòng)的時(shí)候不加載資源,只有在運(yùn)行當(dāng)中需要一些資源時(shí)礁击,再去加載這些資源盐杂,即在需要的時(shí)候才加載(效率低,占用內(nèi)存卸吡)链烈,所謂懶加載,寫的是其get方法
3.緩存的使用 比如挚躯,服務(wù)器的不經(jīng)常變化的資源强衡,圖片,包括tableviewCell的行高码荔。因?yàn)榧虞d資源和計(jì)算高度多CPU的消耗也是比較高的
4.UIView加載背景圖. 常用的有下面幾種
imageName方法
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"image.jpg"]];
其他的方法
NSString *path = [[NSBundlemainBundle]pathForResource:@"image"ofType:@"jpg"];
self.view.backgroundColor = [UIColorcolorWithPatternImage:[UIImageimageWithContentsOfFile:path]];
這兩種方式都會(huì)在生成color時(shí)占用大量的內(nèi)存漩勤。如果圖片大小不夠,就會(huì)平鋪多張圖片缩搅,不會(huì)去拉伸圖片以適應(yīng)View的大小越败。在View釋放后,1中的color不會(huì)跟著釋放硼瓣,而是一直存在內(nèi)存中究飞;2中的color會(huì)跟著釋放掉,當(dāng)然再次生成color時(shí)就會(huì)再次申請(qǐng)內(nèi)存.在UIView上再添加一個(gè)UIImageView顯示圖片作為UIView的背景圖片
注意:如果有點(diǎn)擊事件的話堂鲤, userInteractionEnabled用戶交互設(shè)置為YES亿傅。
iOS視圖都是一個(gè)圖層,最先放置的圖層就會(huì)在最底層瘟栖,如此最先給UIView添加一個(gè)UIImageView就可以作UIView的背景圖片使用啦 葵擎。
其他方式(推薦)
UIImage *image = [UIImageimageWithContentsOfFile:path];
self.view.layer.contents = (id)image.CGImage;
Over 如果對(duì)你有幫助希望給個(gè)關(guān)注,或者點(diǎn)個(gè)贊慢宗!小編非常感謝F阂稀!镜沽!