• <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應用程序性能的提示和技巧 — 中級篇(3)

    發表于:2013-05-08來源:破船之家作者:BeyondVincent點擊數: 標簽:iOS
    在iOS編碼中,跟別的許多東西類似,這里也有兩種方法來給view設置一個背景圖片: 可以使用UIColor的colorWithPatternImge方法來創建一個顏色,并將這個顏色設

      在iOS編碼中,跟別的許多東西類似,這里也有兩種方法來給view設置一個背景圖片:

      可以使用UIColor的colorWithPatternImge方法來創建一個顏色,并將這個顏色設置為view的背景顏色。

      可以給view添加一個UIImageView子視圖。

      如果你有一個全尺寸的背景圖片,那么應該使用UIImageView,因為UIColor的colorWithPatternImge方法是用來創建小圖片的——該圖片會被重復使用。此時使用UIImageView會節省很多內存。

      // You could also achieve the same result in Interface BuilderUIImageView *backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background"]];[self.view addSubview:backgroundView];

      不過,如果你計劃用小圖片當做背景,那么應該使用UIColor的colorWithPatternImge方法。這種情況下繪制速度會很快,并且不會消耗大量的內存。

      self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background"]];

      18) 降低Web內容的影響

      UIWebView非常有用。用它可以很容易的顯示web內容,甚至可以構建UIKit空間難以顯示的內容。

      不過,你可以能已經注意到程序中使用的UIWebView組建沒有蘋果的Safari程序快。這是因為JIT編譯限制了WebKit的Nitro引擎的使用。

      因此為了獲得更加的性能,需要調整一下HTML的大小。首先就是盡量的擺脫JavaScript,并避免使用大的礦建,例如jQuery。有時候使用原始的JavaScript要比別的框架快。

      另外,盡量的異步加載JavaScript文件——特別是不直接影響到頁面行為時,例如分析腳本。

      最后——讓使用到的圖片,跟實際需要的一樣大小。如之前提到的,盡量使用sprite sheets,以此節省內存和提升速度。

      更多相關信息,可以看一下: WWDC 2012 session #601 – 在iOS中優化UIWebView和網站中的Web內容。

      19) 設置陰影路徑

      如果需要在view活layer中添加一個陰影,該如何處理呢?

      大多數開發者首先將QuartzCore框架添加到工程中,然后添加如下代碼:

      #import <QuartzCore/QuartzCore.h> // Somewhere later ...UIView *view = [[UIView alloc] init]; // Setup the shadow ...view.layer.shadowOffset = CGSizeMake(-1.0f, 1.0f);view.layer.shadowRadius = 5.0f;view.layer.shadowOpacity = 0.6;

      看起來非常容易,不是嗎?

      然而不幸的是上面這種方法有一個問題。Core Animation在渲染陰影效果之前,必須通過做一個離屏(offscreen)才能確定view的形狀,而這個離屏操作非常耗費資源。

      下面有一種方法可以更容易的讓系統進行陰影渲染:設置陰影路徑!

      view.layer.shadowPath = [[UIBezierPath bezierPathWithRect:view.bounds] CGPath];

      通過設置陰影路徑,iOS就不用總是再計算該如何繪制陰影了。只需要使用你預先計算好的路徑即可。有一點不好的是,根據view的格式,自己可能很難計算出路徑。另外一個問題就是當view的frame改變時,必須每次都更新一下陰影路徑。

      如果你想了解更多相關信息,Mark Pospesel寫了一篇很棒的文章:shadowPath。

      20) 優化TableView

      Table views需要快速的滾動——如果不能的話,用戶會感覺到停頓。

      為了讓table view平滑的滾動,確保遵循了如下建議:

      設置正確的reuseIdentifer以重用cell。

      盡量將view設置為不透明,包括cell本身。

      避免漸變,圖像縮放以及離屏繪制。

      如果row的高度不相同,那么將其緩存下來。

      如果cell顯示的內容來此網絡,那么確保這些內容是通過異步來獲取的。

      使用shadowPath來設置陰影。

      減少subview的數量。

      在cellForRowAtIndexPath:中盡量做更少的操作。如果需要做一些處理,那么最好做過一次之后,就將結果緩存起來。

      使用適當的數據結構來保存需要的信息。不同的結構會帶來不同的操作代價。

      使用rowHeight, sectionFooterHeight 和 sectionHeaderHeight 來設置一個恒定 高度,而不要從delegate中獲取。

      21) 選擇正確的數據存儲方式

      選擇正確的數據存儲方式

      當需要存儲和讀取大量的數據時,該如何選擇存儲方式呢?

      有如下選擇:

      使用NSUserDefaults進行存儲

      保存為XML,JSON或Plist格式的文件

      利用NSCoding進行歸檔

      存儲到一個本地數據庫,例如SQLite。

      使用Core Data.

      使用NSUserDefaults有什么問題呢? 雖然NSUserDefaults很好并且容易,不過只只針對于存儲小量數據(比如你的級別,或者聲音是開或關)。如果要存儲大量的數據,最好選擇別的存儲方式。

      大量數據保存為結構化的文件也可能會帶來問題。一般,在解析這些結構數據之前,需要將內容全部加載到內存中,這是很消耗資源的。雖然可以使用SAX來處理XML文件,但是這有點復雜。另外,加載到內存中的所有對象,不一定全部都需要用到。

      那么使用NSCoding來保存大量數據怎么樣呢?因為它同樣是對文件進行讀寫,因此依然存在上面說的問題。

      要保存大量的數據,最好使用SQLite或Core Data。通過SQLite或Core Data可以進行具體的查詢——只需要獲取并加載需要的數據對象——避免對數據進行不合理的搜索。在性能方面,SQLite和Core Data差不大。

      SQLite和Core Data最大的區別實際上就是用法上。Core Data代表一個對象模型,而SQLite只是一個DBMS。一般,蘋果建議使用Core Data,不過如果你有特殊的原因不能使用Core Data的話,可以使用低級別的SQLite。

    原文轉自: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>