在開發iOS應用程序時,讓程序具有良好的性能是非常關鍵的。本文就25個增強iOS應用程序性能的提示和技巧進行了整理。
在開發過程中,下面這些初級技巧需要時刻注意:
1.使用ARC進行內存管理
2.在適當的情況下使用reuseIdentifier
3.盡可能將View設置為不透明(Opaque)
4.避免臃腫的XIBs
5.不要阻塞主線程
6.讓圖片的大小跟UIImageView一樣
7.選擇正確的集合
8.使用GZIP壓縮
1) 使用ARC進行內存管理
ARC是在iOS 5中發布的,它解決了最常見的內存洩露問題——也是開發者最容易健忘的。ARC的全稱是“Automatic Reference Counting”——自動引用計數,它會自動的在代碼中做retain/release工作,開發者不用再手動處理。
下面是創建一個View通用的一些代碼塊:
UIView *view = [[UIView alloc] init];
// ...
[self.view addSubview:view];
[view release];
在上面代碼結束的地方很容易會忘記調用release。不過當使用ARC時,ARC會在後台自動的幫你調用release。
ARC除了能避免內存洩露外,還有助於程序性能的提升:當程序中的對象不再需要的時候,ARC會自動銷毀對象。所以,你應該在工程中使用ARC。
下面是學習ARC的一些資源:
蘋果的官方文檔
Matthijs Hollemans的初級ARC
Tony Dahbura的如何在Cocos2D 2.X工程中使用ARC
如果你仍然不確定ARC帶來的好處,那麼看一些這篇文章:8個關於ARC的神話——這能夠讓你相信你應該在工程中使用ARC!
值得注意的是,ARC並不能避免所有的內存洩露。使用ARC之後,工程中可能還會有內存洩露,不過引起這些內存洩露的主要原因是:block,retain循環,對CoreFoundation對象(通常是C結構)管理不善,以及真的是代碼沒寫好。
這裡有一篇文章是介紹哪些問題是ARC不能解決的 — 以及如何處理這些問題。
2) 在適當的情況下使用reuseIdentifier
在適當的情況使用reuseIdentifier
在iOS程序開發中一個普遍性的錯誤就是沒有正確的為UITableViewCells、UICollectionViewCells和UITableViewHeaderFooterViews設置reuseIdentifier。
為了獲得最佳性能,當在tableView:cellForRowAtIndexPath:方法中返回cell時,table view的數據源一般會重用UITableViewCell對象。table view維護著UITableViewCell對象的一個隊列或者列表,這些數據源已經被標記為重用了。
如果沒有使用reuseIdentifier會發生什麼?如果你在程序中沒有使用reuseIdentifier,table view每次顯示一個row時,都會配置一個全新的cell。這其實是一個非常消耗資源的操作,並且會影響程序中table view滾動的效率。
自iOS 6以來,你可能還希望header和footer views,以及UICollectionView的cell和supplementary views。
為了使用reuseIdentifiers,在table view請求一個新的cell時,在數據源中調用下面的方法:
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
如果table view維護的UITableViewCell隊列或列表中有可用的cell,則從隊列從移除一個已經存在的cell,如果沒有的話,就從之前注冊的 nib文件或類中創建一個新的cell。如果沒有可以重用的cell,並且沒有注冊nib文件或類,tableview的 dequeueReusableCellWithIdentifier:方法會返回一個nil。
3) 盡可能將View設置為不透明(Opaque)
盡量將view設置為Opaque
如果view是不透明的,那麼應該將其opaque屬性設置為YES。為什麼要這樣做呢?這樣設置可以讓系統以最優的方式來繪制view。opaque屬性可以在Interface Builder或代碼中設置。