iOS開發之效能最佳化

來源:互聯網
上載者:User

標籤:

1.避免過於龐大的XIB

當載入XIB的時候把所有的東西都放在了記憶體裡,包括任何的圖片;如果有一個不會即刻用到的view,就會浪費寶貴的記憶體資源了。

當載入一個引用了圖片或者聲音資源的nib時,nib載入代碼會把圖片和音效檔寫進記憶體。

2.不要阻塞主線程

UIKit在主線程上的所有工作,渲染,管理觸摸,回應輸入等都需要在上面完成。

將耗時操作放在子線程中。

3.在imageViews中調整圖片的大小

如果要在UIImageView中顯示一個來自bundle的圖片,你就應該保證圖片的大小和UIImageView的大小相同。在運行中縮放圖片是很耗費資源的,特別是UIImageView嵌套在UIScrollView中的情況下。

如果是從遠程伺服器載入,本地無法控製圖片的大小。應該在下載完成  後,最好用background thread,縮放一次,然後在UIImageView中使用縮放後的圖片。

4.選擇正確的collection

Arrays:有序的一組值。使用index來lookup很快,使用value lookup很慢,插入/刪除很慢。

Dictionaries:儲存索引值對。用值來尋找比較快。

Sets:無序的一組值。用值來尋找很快,插入/刪除很快。

5.重用或者消極式載入Views

如點擊一個按鈕需要呈現一個view的情境。

第一種:建立並隱藏這個view當這個screen載入的時候,當需要時顯示它。(更加耗記憶體)

第二各:當需要時才建立並展示。(比上一種慢)

6.Cache,Cache,還是Cache!

Cache所需要Cache的(也就是那些不大可能改變但是需要經常讀取的東西)

7.權衡渲染的方法

簡單來說,就是用事先渲染好的圖片更快一些,因為如此一來iOS就免去了建立一個圖片再畫東西上去然後顯示在螢幕上的程式。問題是你需要把所有你需要用到的圖片放到app的bundle裡面,這樣就增加了體積 – 這就是使用可變大小的圖片更好的地方了: 你可以省去一些不必要的空間,也不需要再為不同的元素(比如按鈕)來做不同的圖。
然而,使用圖片也意味著你失去了使用代碼調整圖片的機動性,你需要一遍又一遍不斷地重做他們,這樣就很浪費時間了,而且你如果要做一個動畫效果,雖然每幅圖只是一些細節的變化你就需要很多的圖片造成bundle大小的不斷增大。

總得來說,你需要權衡一下利弊,到底是要效能能還是要bundle保持合適的大小。

8.重用重大開銷對象

想要避免使用這個對象的瓶頸你就需要重用他們,可以通過添加屬性到你的class裡或者建立靜態變數來實現。
注意如果你要選擇第二種方法,對象會在你的app運行時一直存在於記憶體中,和單例(singleton)很相似。

9.避免反覆處理資料

比如需要資料來展示一個tableView,最好直播從伺服器取array結構的資料以避免的額外的中間資料結構改變。

如果需要從特定的key中取資料,那麼就使用索引值對的dictionary;

10.正確設定背影圖片

使用UIColor的colorWithPatternImage來設定背景色;

在view中添加一個UIImageView作為一個子View;

如果你使用全畫幅的背景圖,你就必須使用UIImageView因為UIColor的colorWithPatternImage是用來建立小的重複的圖片作為背景的。

如果你用小圖平鋪來建立背景,你就需要用UIColor的colorWithPatternImage來做了,它會更快地渲染也不會花費很多記憶體

11.最佳化Table View

正確使用reuseIdentifier來重用cells

盡量使所有的view opaque,包括cell自身

避免漸層,圖片縮放,後台選人

緩衝行高

如果cell內現實的內容來自web,使用非同步載入,緩衝請求結果

使用shadowPath來畫陰影

減少subviews的數量

盡量不適用cellForRowAtIndexPath:,如果你需要用到它,只用一次然後緩衝結果

使用正確的資料結構來儲存資料

盡量使用rowHeight, sectionFooterHeight 和 sectionHeaderHeight來設定固定的高,不要請求delegate

12.使用正確的資料存放區選項

使用NSUserDefaults(只能存一些小型資料,比如一些簡單的布爾型的設定選項)

使用XML,JSON或者plist(需要讀取檔案到記憶體裡去解析,這樣是很不經濟的)

NSCoding(也是檔案讀寫,也有上述問題)

Sqlite(可以儲存大資料)

13.加快啟動時間

儘可能做更多的非同步任務

避免使用龐大的XIB,因為他們是在主線程上載入,盡量使用Storyboards.(必須把裝置從Xcode斷開來測試啟動速度)

14.使用Autorelease Pool

建立多個臨時對象,發現記憶體一直減少,直到這些對象被release的時候,這是因為只有當autorelease pool的時候memory才會被釋放。

iOS開發之效能最佳化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.