成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

25個增強iOS應(yīng)用程序性能的提示和技巧(高級篇)

移動開發(fā) iOS
在開發(fā)iOS應(yīng)用程序時,讓程序具有良好的性能是非常關(guān)鍵的。這也是用戶所期望的,如果你的程序運行遲鈍或緩慢,會招致用戶的差評。然而由于iOS設(shè)備的局限性,有時候要想獲得良好

在開發(fā)iOS應(yīng)用程序時,讓程序具有良好的性能是非常關(guān)鍵的。這也是用戶所期望的,如果你的程序運行遲鈍或緩慢,會招致用戶的差評。然而由于iOS 設(shè)備的局限性,有時候要想獲得良好的性能,是很困難的。在開發(fā)過程中,有許多事項需要記住,并且關(guān)于性能影響很容易就忘記。本文收集了25個關(guān)于可以提升 程序性能的提示和技巧。分為3個不同的等級:初級、中級和高級:

高級
當(dāng)且僅當(dāng)下面這些技巧能夠解決問題的時候,才使用它們:

22.加速啟動時間
23.使用Autorelease Pool
24.緩存圖片 — 或者不緩存
25.盡量避免Date格式化

高級性能提升

尋找一些高明的方法,讓自己變?yōu)橐粋€全代碼忍者?下面這些高級的性能優(yōu)化技巧可以在適當(dāng)?shù)臅r候讓程序盡可能的高效運行!

22) 加速啟動時間

能快速的啟動程序非常重要,特別是在用戶***次啟動程序時。***映像對程序來說非常重要!

讓程序盡量快速啟動的方法就是盡量以異步方式執(zhí)行任務(wù),例如網(wǎng)絡(luò)請求,數(shù)據(jù)訪問或解析。

另外,避免使用臃腫的XIBs,因為XIB的加載是在主線程中進行的。但是記住storyboard沒有這樣的問題——所以如果可以的話就使用storyboard吧!

注意:在利用Xcode進行調(diào)試時,watchdog不會運行,所在設(shè)備中測試程序啟動性能時,不要將設(shè)備連接到Xcode。
23) 使用Autorelease Pool

NSAutoreleasePool負責(zé)釋放一個代碼塊中的自動釋放對象。一般都是由UIKit來創(chuàng)建的。不過有些情況下需要手動創(chuàng)建NSAutoreleasePool。

例如,如果在代碼中創(chuàng)建了大量的臨時對象,你將注意到內(nèi)存使用量在增加,直到這些對象被釋放。問題是只有當(dāng)UIKit耗盡了 autorelease pool,這些對象才會被釋放,也就是說當(dāng)不再需要這些對象之后,這些對象還在內(nèi)存中占據(jù)著資源。

不過這個問題完全可以避免:在@autoreleasepool代碼塊中創(chuàng)建臨時對象,如下代碼:

 

  1. NSArray *urls = <# An array of file URLs #>; 
  2. for (NSURL *url in urls) { 
  3.     @autoreleasepool { 
  4.         NSError *error; 
  5.         NSString *fileContents = [NSString stringWithContentsOfURL:url 
  6.                                          encoding:NSUTF8StringEncoding error:&error]; 
  7.         /* Process the string, creating and autoreleasing more objects. */ 
  8.     } 

當(dāng)每次迭代完之后,都會釋放所有的autorelease對象。

關(guān)于NSAutoreleasePool的更多內(nèi)容可以閱讀蘋果的官方文檔
24) 緩存圖片--或者不緩存

iOS中從程序bundle中加載UIImage一般有兩種方法。

***種比較常見:imageNamed。

第二種方法很少使用:imageWithContentsOfFile

為什么有兩種方法完成同樣的事情呢?imageNamed的優(yōu)點在于可以緩存已經(jīng)加載的圖片。蘋果的文檔中有如下說法:

This method looks in the system caches for an image object with the specified name and returns that object if it exists. If a matching image object is not already in the cache, this method loads the image data from the specified file, caches it, and then returns the resulting object.

這種方法會在系統(tǒng)緩存中根據(jù)指定的名字尋找圖片,如果找到了就返回。如果沒有在緩存中找到圖片,該方法會從指定的文件中加載圖片數(shù)據(jù),并將其緩存起來,然后再把結(jié)果返回。

而imageWithContentsOfFile方法只是簡單的加載圖片,并不會將圖片緩存起來。這兩個方法的使用方法如下:

  1. UIImage *img = [UIImage imageNamed:@"myImage"]; // caching 
  2. // or 
  3. UIImage *img = [UIImage imageWithContentsOfFile:@"myImage"]; // no caching 

那么該如何選擇呢?

如果加載一張很大的圖片,并且只使用一次,那么就不需要緩存這個圖片。這種情況imageWithContentsOfFile比較合適——系統(tǒng)不會浪費內(nèi)存來緩存圖片。

然而,如果在程序中經(jīng)常需要重用的圖片,那么***是選擇imageNamed方法。這種方法可以節(jié)省出每次都從磁盤加載圖片的時間。

別走開,下頁繼續(xù)為您激情介紹

#p#
25) 盡量避免Date格式化
如果有許多日期需要使用NSDateFormatter,那么需要小心對待了。如之前(重用花銷很大的對象)所提到的,無論什么時候,都應(yīng)該盡量重用NSDateFormatters。

然而,如果你需要更快的速度,那么應(yīng)該使用C來直接解析日期,而不是NSDateFormatter。Sam Soffes寫了一篇文章,其中提供了一些解析ISO-8601格式日期字符的串代碼。你只需要簡單的調(diào)整一下其中的代碼就可以滿足自己特殊的需求了。

這聽起來不錯把——不過,你相信這還有更好的一個辦法嗎?

如果你自己能控制處理日期的格式,那么可以選擇 Unix timestamps(http://en.wikipedia.org/wiki/Unix_time)。Unix timestamps是一個簡單的整數(shù),代表了從新紀元時間(epoch)開始到現(xiàn)在已經(jīng)過了多少秒,通常這個新紀元參考時間是00:00:00 UTC on 1 January 1970。

你可以很容易的見這個時間戳轉(zhuǎn)換為NSDate,如下所示:

  1. - (NSDate*)dateFromUnixTimestamp:(NSTimeInterval)timestamp { 
  2.     return [NSDate dateWithTimeIntervalSince1970:timestamp]; 

上面這個方法比C函數(shù)還要快!

注意:許多網(wǎng)絡(luò)APIs返回的時間戳都是毫秒,因此需要注意的是在將這個時間戳傳遞給dateFromUnixTimestamp之前需要除以1000。

何去何從?
強烈建議對程序性能優(yōu)化感興趣的讀者看看下面列出來的WWDC視頻。在看視頻之前,你需要注冊一個Apple ID(注冊后就可以觀看所有WWDC2012的視頻):

#406: Adopting Automatic Reference Counting
#238: iOS App Performance: Graphics and Animations
#242: iOS App Performance: Memory
#235: iOS App Performance: Responsiveness
#409: Learning Instruments
#706: Networking Best Practices
#514: OpenGL ES Tools and Techniques
#506: Optimizing 2D Graphics and Animation Performance
#601: Optimizing Web Content in UIWebViews and Websites on iOS
#225: Up and Running: Making a Great Impression with Every Launch
下面這些視頻來自WWDC 2011 ,也非常有用:

#308: Blocks and Grand Central Dispatch in Practice
#323: Introducing Automatic Reference Counting
#312: iOS Performance and Power Optimization with Instruments
#105: Polishing Your App: Tips and tricks to improve the responsiveness and performance
#121: Understanding UIKit Rendering

這里還有更多相關(guān)視頻,大多數(shù)來自iOS 5技術(shù)講座

Optimizing App Performance with Instruments
Understanding iOS View Compositing
基于 “Your iOS App Performance Hitlist” 視頻,Ole Begemann寫了一篇文章。蘋果還提供了一篇非常好的文章:性能優(yōu)化。其中提供的技巧和提示對程序性能提升很有幫助。

查看初級篇:25個增強iOS應(yīng)用程序性能的提示和技巧(初級篇)

查看中級篇:25個增強iOS應(yīng)用程序性能的提示和技巧(中級篇)

責(zé)任編輯:閆佳明 來源: beyondvincent
相關(guān)推薦

2013-04-16 14:42:47

增強iOS應(yīng)用程序性能

2013-04-16 13:51:23

增強iOS應(yīng)用程序性能

2022-07-04 17:32:12

DevOpsAIOps

2010-02-04 09:41:03

Android應(yīng)用程序

2009-07-29 11:33:14

ASP.NET技巧ASP.NET應(yīng)用程序

2011-08-08 13:35:50

Web應(yīng)用WANWeb應(yīng)用程序

2010-11-15 16:20:33

Oracle系統(tǒng)優(yōu)化

2011-09-20 10:41:45

Web

2009-07-01 18:24:59

JSP應(yīng)用程序JMeter

2019-10-17 10:10:23

優(yōu)化Web前端

2010-07-28 09:25:41

jQueryJavaScript性

2011-01-19 11:10:50

程序交付優(yōu)化應(yīng)用程序性能管理監(jiān)控

2014-12-16 09:35:13

DevOps

2015-09-24 09:17:55

應(yīng)用程序網(wǎng)絡(luò)存儲

2018-11-06 09:53:27

2020-12-03 08:00:00

SQL數(shù)據(jù)庫MySQL

2019-09-26 08:33:51

Nginx技術(shù)Java

2015-05-07 09:05:18

2009-11-18 09:00:17

數(shù)據(jù)庫優(yōu)化應(yīng)用程序性能

2011-07-07 09:03:12

ASP.NET
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日本精品久久久久久久 | 日韩一| 亚洲狠狠爱一区二区三区 | 欧美成年网站 | 成人欧美一区二区三区黑人孕妇 | 国产ts人妖系列高潮 | 精品在线免费观看视频 | 欧美一区不卡 | 国产精品久久久乱弄 | 久在线视频播放免费视频 | 亚洲久久一区 | 精品国产一区二区三区免费 | 91久久电影 | 日韩精品1区2区3区 爱爱综合网 | 天天拍天天草 | 伊人激情网 | 国产精品免费小视频 | 九一在线| 久久久久国产一区二区三区四区 | 日韩欧美一级精品久久 | 久久精品电影 | 国产区第一页 | 亚洲精品www | 亚洲天堂久久 | 日韩视频在线一区 | 免费观看一区二区三区毛片 | 亚洲一区二区在线电影 | 一区二区三区国产视频 | 高清欧美性猛交 | 国产ts一区 | 日韩欧美国产精品一区 | 在线观看亚洲 | 国产一级片免费在线观看 | 中文字幕在线三区 | 天天干夜夜拍 | 中文字幕一区二区三区在线观看 | 久久久一区二区三区四区 | 国产精品一区二区免费看 | 亚洲xxxxx | 亚洲网在线 | 亚洲天堂一区 |