• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • iOS應用程序性能的提示和技巧 — 中級篇

    發表于:2013-05-08來源:破船之家作者:BeyondVincent點擊數: 標簽:iOS
    然而不幸的是上面這種方法有一個問題。Core Animation在渲染陰影效果之前,必須通過做一個離屏(offscreen)才能確定view的形狀,而這個離屏操作非常耗費資源。

      在開發iOS應用程序時,讓程序具有良好的性能是非常關鍵的。這也是用戶所期望的,如果你的程序運行遲鈍或緩慢,會招致用戶的差評。

      然而由于iOS設備的局限性,有時候要想獲得良好的性能,是很困難的。在開發過程中,有許多事項需要記住,并且關于性能影響很容易就忘記。

      這就是為什么我要寫這篇文章!本文收集了25個關于可以提升程序性能的提示和技巧。

      目錄

      我把性能優化技巧分為3個不同的等級:初級、中級和高級:

      中級

      在性能優化時,當你碰到一些復雜的問題,應該注意和使用如下技巧:

      重用和延遲加載View

      緩存、緩存、緩存

      考慮繪制

      處理內存警告

      重用花銷很大的對象

      使用Sprite Sheets

      避免重新處理數據

      選擇正確的數據格式

      設置適當的背景圖片

      降低Web內容的影響

      設置陰影路徑

      優化TableView

      選擇正確的數據存儲方式

      中級性能提升

      現在,在進行代碼優化時,你已經能夠完成一些初級性能優化了。但是下面還有另外一些優化方案,雖然可能不太明顯(取決于程序的架構和相關代碼),但是,如果能夠正確的利用好這些方案,那么它們對性能的優化將非常明顯!

      9) 重用和延遲加載View

      程序界面中包含更多的view,意味著界面在顯示的時候,需要進行更多的繪制任務;也就意味著需要消耗更多的CPU和內存資源。特別是在一個UIScrollView里面加入了許多view。

      這種情況的管理技巧可以參考UITableView和UICollectionView的行為:不要一次性創建所有的subview,而是在需要的時候在創建view,并且當view使用完畢時候將它們添加到重用隊列中。

      這樣就可以僅在UIScrollView滾動的時候才配置view,以此可以避免分配創建view的帶來的成本——這可能是非常耗資源的。

      現在有這樣的一個問題:在程序中需要顯示的view在什么時機創建(比如說,當用戶點擊某個按鈕,需要顯示某個view)。這里有兩種可選方法:

      在屏幕第一次加載以及隱藏的時候,創建view;然后在需要的時候,再把view顯示出來。

      直到需要顯示view的時候,才創建并顯示view。

      每種方法都有各自的優點和確定。

      使用第一種方法,需要消耗更多的內容,因為創建出來的view一直占據著內存,直到view被release掉。不過,使用這種方法,當用戶點擊按鈕時,程序會很快的顯示出view,因為只需要修改一下view的可見性即可。

      而使用第二種方法則產生相反的效果;當需要的時候猜創建view,這會消耗更少的內存;不過,當用戶點擊按鈕的時候,不會立即顯示出view。

      10) 緩存、緩存、緩存

      在開發程序時,一個重要的規則就是“緩存重要的內容”——這些內容一般不會改變,并且訪問的頻率比較高。

      可以緩存寫什么內容呢?比如遠程服務器的響應內容,圖片,甚至是計算結果,比如UITableView的行高。

      NSURLConnection根據HTTP頭的處理過程,已經把一些資源緩存到磁盤和內存中了。你甚至可以手動創建一個NSURLRequest ,讓其只加載緩存的值。

      下面的代碼片段一般用在為圖片創建一個NSURLRequest:

      + (NSMutableURLRequest *)imageRequestWithURL:(NSURL *)url { NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.cachePolicy = NSURLRequestReturnCacheDataElseLoad; // this will make sure the request always returns the cached image request.HTTPShouldHandleCookies = NO; request.HTTPShouldUsePipelining = YES; [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; return request;}

      注意:你可以使用NSURLConnection抓取一個URL請求,但是同樣可以使用AFNetworking來抓取,這種方法不用修改所有網絡相關的代碼——這是一個技巧!:]

      如果你要直到更多關于HTTP 緩存, NSURLCache, NSURLConnection 以及相關的內容, 那么看一下NSHipster中的the NSURLCache entry。

      如果你需要緩存的內容沒涉及到HTTP請求,那么使用NSCache。

      NSCache的外觀和行為與NSDictionary類似, 但是,當系統需要回收內存時,NSCache會自動的里面存儲的內容。Mattt Thompson 在NSHipster上寫了一篇關于NSCache非常不錯的文章。

      如果還想知道關于HTTP緩存更多的內容,那么建議閱讀一下Google的這篇文章:best-practices document on HTTP caching。

      11) 考慮繪制

      考慮繪制

      在iOS中制作漂亮的按鈕有多種方法??梢允褂萌叽鐖D片,可縮放圖片,或者使用CALayer, CoreGraphics, 甚至是OpenGL來手動測量和繪制按鈕。

      當然,這些方法的復雜程度也不同,并且性能也有所區別。這里有一篇相關文章值得閱讀一下:關于iOS中圖形的性能。其中Andy Matuschak(曾經是蘋果的UIKit小組的組員)對這篇文章的評論中,對于不同的方法及其性能權衡有非常好的一個見解。

      簡單來說,使用預渲染圖片技術是最快的,因為iOS中不用等到在屏幕上顯示的時候才創建圖形和對形狀進行繪制(圖片已經創建好了!)。這樣帶來的問題是需要把所有的圖片都放到程序bundle中,從而增加了程序的大小。因此使用可伸縮圖片在這里將排上用場了:可以移除“浪費”空間的圖片——iOS可以重復利用。并且針對不同的元素(例如按鈕)不需要創建不同的圖片。

      不過,使用圖片的話會失去代碼對圖片的控制能力,進而針對不同的程序,就需要重復的生成每一個需要的圖片,并反復的放到每個程序中。這個處理過程一般會比較慢。另外一點就是如果你需要一個動畫,或者許多圖片都要進行輕微的調整(比如多個顏色的覆蓋),那么需要在程序中加入許多圖片,進而增加了程序bundle的大小。

    原文轉自:http://beyondvincent.com/2013/04/11/25%E4%B8%AA%E5%A2%9E%E5%BC%BAios%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%80%A7%E8%83%BD%E7%9A%84%E6%8F%90%E7%A4%BA%E5%92%8C%E6%8A%80%E5%B7%A7-%E4%B8%AD%E7%BA%A7%E7%AF%87/

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>