精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

iOS應用中多核編程和內存管理

移動開發 iOS
在iOS中concurrency編程的框架就是GCD(Grand Central Dispatch), GCD的使用非常簡單。它把任務分派到不同的queue隊列來處理。

本文集中與iOS多核編程內存管理,為什么?因為iPad 2已經是雙核CPU了!雖然iPad 1的應用已經不慢了,但大家完全可以使用蘋果的多核編程框架來寫出更加responsive的應用。

多核運算

iOS中concurrency編程的框架就是GCD(Grand Central Dispatch), GCD的使用非常簡單。它把任務分派到不同的queue隊列來處理。開發者把任務代碼裝到一個個block里面,操作系統把這些任務代碼分派到不同的資源里去處理,一個簡單的例子來說,為什么初學者寫tableview的時候,滑動列表時總會很卡,因為很多初學者把圖片裝載放到main thread主線程去執行,例如我們要滑動暢順的話,iOS最快可以1秒內刷新60次,如何你的一個cell的文字和圖片裝載超過1/60秒的話,自然就會卡。

所以一般我們會把圖片裝載這些需要多點時間的移出main thread來處理,對于用GCD來說,就是把圖片載入放到另外一個queue隊列中來異步執行,當資源準備好了后,放回到main thread中顯示出來。main thread在GCD中就是main queue。

創建一個新queue隊列的代碼:

  1. dispatch_queue_t network_queue;    
  2. network_queue = dispatch_queue_create("com.myapp.network", nill);    
  3. dispatch_queue_t network_queue;  
  4. network_queue = dispatch_queue_create("com.myapp.network", nill);  

例如,我們圖片讀取放到network_queue來進行異步執行

  1. dispatch_async(network_queue, ^{      
  2.     UIImage *cellImage = [self loadMyImageFromNetwork:image_url];      
  3.     // 將圖片cache到本地       
  4.     [self cacheImage:cellImage];       
  5.     .....         
  6. } );    
  7. dispatch_async(network_queue, ^{    
  8.     UIImage *cellImage = [self loadMyImageFromNetwork:image_url];    
  9.     // 將圖片cache到本地    
  10.     [self cacheImage:cellImage];    
  11.     .....    
  12. } );  

dispatch_async的意思就是將任務進行異步并行處理,不一定需要一個任務處理完后才能處理下一個。以上代碼loadMyImageFromNetwork的意思就是從網絡中讀取圖片,這個任務交給network_queue來處理。這樣讀取圖片的時間過長也不會阻塞主線程界面的處理。

當我們處理完圖片后,應該更新界面,從queue的概念去設計,就是要將更新界面的代碼放到main queue中去,因為iOS里面永遠是主線程來刷新重畫UI。所以代碼應該為,

  1. dispatch_async(network_queue, ^{      
  2.     UIImage *cellImage = [self loadMyImageFromNetwork:image_url];      
  3.     // 將圖片cache到本地       
  4.     [self cacheImage:cellImage];      
  5.    // 回到主線程       
  6.    dispatch_async(dispatch_get_main_queue(), ^{      
  7.       // 顯示圖片到界面       
  8.       [self displayImageToTableView:cellImage];      
  9.    }];        
  10. } );    
  11. dispatch_async(network_queue, ^{    
  12.   UIImage *cellImage = [self loadMyImageFromNetwork:image_url];    
  13.     // 將圖片cache到本地    
  14.     [self cacheImage:cellImage];    
  15.    // 回到主線程    
  16.    dispatch_async(dispatch_get_main_queue(), ^{    
  17.       // 顯示圖片到界面    
  18.       [self displayImageToTableView:cellImage];    
  19.    }];    
  20. } );  

dispatch_get_main_queue() 函數就是返回主線程,^{} 封裝的就是任務代碼,這樣嵌套方式就可以從一個隊列queue,跳到另一個queue,就是這么簡單。

我們一般可以把networking有關的代碼放到一個queue,把圖片resize的代碼放到另外一個queue,處理完后更新界面,只需要嵌套跳回到 main queue。這樣加上幾行代碼,你的程序就可以利用到系統多核資源,把具體的調度工作交給了操作系統自己來分配。有了這樣的代碼,不管你的硬件是單核,雙核還是iMac的4核,甚至8核,都可以非常好地并行處理。

內存管理

我一直驚嘆iOS和Objective-C內存處理能力,例如iPad版本的iWork,Pages應用就是一個內存處理技術應用的鬼斧神工之作。想想256M內存的iPad,可以帶來如此的華麗的界面同時獲得如此流暢的用戶體驗,真是不簡單。原因就是iOS一直提倡開發者在有限硬件資源內寫出最優化的代碼,使用CPU最少,占用內存最小。

(以下代碼適用于iOS SDK 4.1, 由于新SDK 4.2對內存使用有新改動,所以可能有不同。。。)

1. 盡量少的UIView層

通常我們喜歡把很多控件層(UILabel,UIButton,UIView等)一起放到一個大的UIView容器來顯示我們的內容,這個方法一般是可以的,但是如果要經常重新刷新內容的大區域界面,多數發生在iPad的應用中,這個方法會帶來過多的內存使用和動畫的延遲(比較卡),例如,scrollview的動畫比較卡,又或者,經常收到內存警告。其中一個重要原因是每個控件,特別是透明底的,會多次重新繪制(drawRect)過多。其解決辦法是,盡量將幾個控件合并到一個層上來顯示,這樣系統會減少系統調用drawRect,從而帶來性能上的提升。

很簡單的一個例子,就是iNotes提供手寫功能,用戶可以在iPad屏幕上寫出不同的筆畫,開始的設計是,用戶每寫一劃,iNotes就會生成一個新的透明底UIView來保持這個筆畫,用戶寫了10筆,系統就生產了10個UIView,每個view的大小都是整個屏幕的,以便用戶的undo操作。這個方案帶來嚴重的內存問題,因為系統將每個層都保持一個bitmap圖,一個像素需要4bit來算,一個層的大小就是 4x1024x768 ~ 3M, 10個層就是 10x3M = 30M,很明顯,iPad很快爆出內存警告。

這個例子最后的方案是,所有筆畫都畫在同一個層,iNotes可以保存筆畫的點進行undo操作。這樣的方案就是無論用戶畫多少筆畫,界面重畫需要的資源都是一樣的。

2. 顯示最佳尺寸的圖片

很多程序員比較懶,網絡上拿下來的圖片,直接就用UIImageView將其顯示給用戶,這樣的后果就是,程序需要一直保存著大尺寸的圖片到內存。解決辦法應該是先將圖片縮小到需要顯示的尺寸,釋放大尺寸圖片的內存,然后再顯示到界面給用戶。

3. 盡量使用圖片pattern,而不是一張大的圖片

例如,很多界面設計者喜歡在界面上放一個大底圖,但這個底圖是老是占用著內存的,最佳方案是,設計出一個小的pattern圖,然后用這個方案顯示成底圖。

  1. UIImage *smallImage = [[UIImage alloc] initWithContentsOfFile:path];    
  2. backgroundView.backgroundColor = [UIColor colorWithPatternImage:smallImage];    
  3. [smallImage release];    
  4. UIImage *smallImage = [[UIImage alloc] initWithContentsOfFile:path];  
  5. backgroundView.backgroundColor = [UIColor colorWithPatternImage:smallImage];  
  6. [smallImage release];  

4. 使用完資源后,立即釋放

一般objective-c的習慣是,用完的資源要立即釋放,因為明白什么時候用完某個資源的是程序員你自己。

例如,我們要讀較大的圖片,把它縮小后,顯示到界面去。當大圖片使用完成后,應該立即釋放。代碼如下:

  1. UIImage *fullscreenImage = [[UIImage alloc] initWithContentOfFile:path];    
  2. UIImage *smallImage = [self resizeImage:fullscreenImage];    
  3. [fullscreenImage release];    
  4. imageView.image = smallImage;    
  5. ......    
  6. UIImage *fullscreenImage = [[UIImage alloc] initWithContentOfFile:path];  
  7. UIImage *smallImage = [self resizeImage:fullscreenImage];  
  8. [fullscreenImage release];  
  9. imageView.image = smallImage

......

5. 循環中大量生成的自動釋放autorelease對象,可以考慮使用autorelease pool封裝

代碼范例:

  1. for(UIView *subview in bigView.subviews) {    
  2.     // 使用autorelease pool自動釋放對象池     
  3.     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];    
  4.     UIImageView *imageView = (UIImageView *)subview;    
  5.         
  6.     // subview處理代碼     
  7.     .......    
  8.     // 銷毀自動釋放對象     
  9.     [pool  drain];    
  10. }    
  11. for(UIView *subview in bigView.subviews) {  
  12.     // 使用autorelease pool自動釋放對象池  
  13.     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
  14.     UIImageView *imageView = (UIImageView *)subview;  
  15.       
  16.     // subview處理代碼  
  17.     .......  
  18.     // 銷毀自動釋放對象  
  19.     [pool  drain];  
  20. }  

自動釋放對象池把每個循環內生成的臨時對象使用完后立即釋放

以上的意見是本人多年來編寫iPad/iPhone程序的經驗,另外iOS 4.0的multi-tasking特性發布后,程序可以被調入后臺運行,蘋果工程師的意見是,進入后臺運行時,你的應用應該釋放掉能釋放的對象,盡量保持在16M左右,這樣別的程序運行時才不容易把你的應用擠掉。

小結:iOS應用中多核編程內存管理的內容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: CSDN博客
相關推薦

2011-08-22 11:07:16

IOS 開發多核內存

2011-07-21 17:40:43

iOS 多核 內存

2013-12-16 15:04:51

多核編程

2014-03-12 09:37:22

內存管理autoreleaseautorelease

2018-07-23 09:26:08

iOS內存優化

2009-01-16 09:58:07

C#編程C#內存管理垃圾收集

2013-12-18 16:32:27

多核編程同步模式

2017-03-07 10:15:35

iOS內存管理開發

2013-12-18 16:12:26

多核編程

2013-12-16 15:09:15

多核負載

2011-08-16 15:13:49

IOS編程內存

2017-02-09 21:24:22

iOS內存管理

2016-04-11 09:30:49

內存管理ios開發

2011-07-21 14:42:45

iOS UIViewCont 內存

2015-03-13 09:30:23

iOS內存管理

2013-12-18 13:26:24

多核編程

2013-12-18 17:29:10

多核并行

2013-07-19 13:16:26

iOS中BlockiOS開發學習內存管理

2023-10-18 13:31:00

Linux內存

2013-12-18 16:18:08

多核線程
點贊
收藏

51CTO技術棧公眾號

mm131亚洲精品| 欧美激情一区二区| 精品乱码亚洲一区二区不卡| 日韩亚洲欧美精品| www.97av.com| 美女久久网站| 久久成人综合视频| 亚洲精品午夜在线观看| 国产在线高清理伦片a| 国产精品综合网| 97成人精品区在线播放| 免费一级黄色录像| 成人av动漫| 欧美视频三区在线播放| 黄色三级中文字幕| 1区2区3区在线观看| 国产白丝精品91爽爽久久 | 里番在线观看网站| 91玉足脚交白嫩脚丫在线播放| 国产在线拍偷自揄拍精品| 国产一级视频在线| 色777狠狠狠综合伊人| 亚洲黄色av女优在线观看| 污污的网站免费| 亚洲黄色免费看| 一区二区久久久| 欧美一级二级三级| 天天躁日日躁狠狠躁喷水| 另类图片国产| 78色国产精品| 欧美日韩中文视频| 午夜精品亚洲| 日韩在线国产精品| 久久久久亚洲AV成人无码国产| 亚洲成人高清| 欧美影院午夜播放| 人妻无码久久一区二区三区免费| 亚洲av片在线观看| www.亚洲精品| 国产伦精品一区二区三区免 | 亚洲专区一区二区三区| 日韩在线视频观看正片免费网站| 日本一区二区三区在线免费观看| 成人免费黄色| 色狠狠桃花综合| 无码人妻精品一区二区三区在线| 里番在线播放| 国产精品-色哟哟| 国产午夜久久av| 欧美日韩国产123区| 99视频在线免费| 高清不卡亚洲| 香蕉乱码成人久久天堂爱免费| 欧美 国产 精品| 欧美成年黄网站色视频| 国产精品久久一卡二卡| 亚洲精品日韩精品| 色噜噜在线播放| 乱人伦精品视频在线观看| 91成人国产在线观看| 欧美另类一区二区| 麻豆久久精品| 国产精品xxxxx| 特级西西444www高清大视频| 视频一区在线播放| 欧美最猛性xxxxx亚洲精品| 国产无套丰满白嫩对白| 老司机久久99久久精品播放免费 | 爱看av在线入口| 亚洲精品国产a| 日韩视频免费播放| caoporn视频在线观看| 亚洲国产中文字幕在线视频综合| 日韩成人手机在线| 日本色护士高潮视频在线观看| 亚洲综合色成人| 男人日女人视频网站| 自拍偷拍亚洲视频| 欧美三级欧美一级| 丁香婷婷激情网| 草民电影神马电影一区二区| 欧美图区在线视频| 国产乱国产乱老熟300部视频| 嫩草国产精品入口| 尤物精品国产第一福利三区| 国产一区二区三区视频播放| 亚洲草久电影| 欧美成人免费观看| 国产91av视频| 国内精品久久久久久久97牛牛| 久久久久久久久久国产精品| 91video| 久久久精品五月天| 成人午夜小视频| 婷婷色在线观看| 国产午夜精品一区二区三区嫩草| 伊人网在线免费| 狂野欧美性猛交xxxxx视频| 欧美性精品220| gogogo高清免费观看在线视频| 中文字幕系列一区| 精品久久人人做人人爽| www色com| 99精品网站| 性视频1819p久久| 亚洲天堂久久久久| 不卡一卡二卡三乱码免费网站| 久久av一区二区三区亚洲| 麻豆视频在线免费观看| 日韩欧美在线中文字幕| 五月天激情播播| 欧美精品第一区| 久久国产精品影视| 中文字幕激情视频| 久久亚洲欧美国产精品乐播| 欧美日韩亚洲一区二区三区在线观看 | 日产亚洲一区二区三区| 激情欧美一区二区| 久久资源亚洲| 污污网站在线观看| 在线不卡欧美精品一区二区三区| 日韩www视频| 亚洲精品国产偷自在线观看| 国产精品黄视频| 伊人免费在线观看| 国产色婷婷亚洲99精品小说| 国产69精品久久久久999小说| 午夜不卡一区| 伊人久久久久久久久久久久久| 久久影院一区二区| 蜜桃传媒麻豆第一区在线观看| 产国精品偷在线| 亚洲婷婷噜噜| 欧美一区二区三区在线视频| 久久久久亚洲av成人网人人软件| 91精品精品| 91精品视频免费| 三级视频网站在线| 精品国产乱码久久久久久天美| 亚洲成年人av| 亚洲激情二区| 国产三区精品| 阿v视频在线观看| 亚洲国产精品悠悠久久琪琪| 免费在线一级片| 国产iv一区二区三区| 欧美激情亚洲天堂| 激情中国色综合| 中文字幕欧美在线| 无码人妻精品一区二区三区蜜桃91 | 麻豆精品一区二区三区| 手机成人在线| 欧美电影在线观看网站| 日韩亚洲综合在线| 中文字幕视频一区二区| 国产精品三级电影| 免费国产a级片| 蜜桃精品wwwmitaows| 日本成人激情视频| 国产女人在线观看| 一本久道久久综合中文字幕| 伊人网在线视频观看| 美女诱惑一区| 亚洲国产精品www| 精品视频一区二区三区在线观看| 欧美床上激情在线观看| 国产白浆在线观看| 午夜久久久久久| 欧美狂猛xxxxx乱大交3| 亚洲一区二区三区免费在线观看 | 欧美成人一品| 国产精品一区二区三区免费| 中文字幕在线看片| 一本一本久久a久久精品综合小说| 亚洲视频在线观看免费视频| 亚洲欧美日韩在线| 亚洲欧洲日韩综合| 亚洲激情综合| 手机成人在线| 懂色av一区二区| 国产精品99免视看9| 欧美性videos| 网爆门在线观看| 欧美调教视频| 欧美亚洲伦理www| 在线观看免费网站黄| 色av一区二区| 在线不卡av电影| 国产成人av福利| 男人用嘴添女人下身免费视频| 亚洲国产国产| 成人精品久久一区二区三区| bl在线肉h视频大尺度| 国产一区二区黄| 亚洲国产精品久久久久爰性色| 亚洲另类一区二区| 美女100%无挡| 成人一级片网址| 午夜免费福利视频在线观看| 欧美日本在线| 欧美日韩在线高清| 亚洲一区二区三区在线免费| 国产精品69久久| 国产精品蜜臀| 亚洲第一精品自拍| 91尤物国产福利在线观看| 精品福利在线视频| 能直接看的av| 成人性视频免费网站| 欧美精品成人网| 欧美日本二区| 青青草影院在线观看| 国产一区二区三区不卡视频网站| 成人动漫视频在线观看免费| 亚洲电影有码| 欧美一级大胆视频| 毛片在线网址| 欧美成人性色生活仑片| 69av在线| 中日韩美女免费视频网址在线观看| 亚洲精品视频91| 欧美日韩综合在线免费观看| 亚洲天堂日韩av| 亚洲一区二区成人在线观看| 日韩av毛片在线观看| 91网站黄www| 性色av蜜臀av浪潮av老女人 | 亚洲一区二区三区四区五区| 久色成人在线| 欧美日韩一区二区在线免费观看 | 亚洲精品视频在线观看网站| 免费看黄色三级| 国产午夜精品一区二区三区四区| 人妻熟女aⅴ一区二区三区汇编| 成人激情小说网站| 1314成人网| 美女视频一区免费观看| 国产麻花豆剧传媒精品mv在线| 亚洲精品资源| 欧美精品久久久久久久免费| 亚洲二区免费| 亚洲国产成人精品无码区99| 韩日在线一区| 大胆欧美熟妇xx| 亚洲精品免费观看| 免费无码不卡视频在线观看| 亚洲免费大片| 国产免费一区二区三区视频| 亚洲一区日韩| 国产自产在线视频| 欧美在线影院| 亚洲午夜精品久久| 91成人精品视频| 免费的一级黄色片| 99亚洲伊人久久精品影院红桃| 国产免费黄色小视频| 野花国产精品入口| 日韩亚洲在线视频| 日本欧美一区二区| 黄色片视频在线| 国内一区二区视频| 国产调教打屁股xxxx网站| 成人免费观看av| 丰满少妇一区二区三区| 国产欧美综合在线观看第十页| 欧美三级视频网站| 亚洲精品欧美综合四区| 中国1级黄色片| 亚洲一区日韩精品中文字幕| 日本中文字幕免费观看| 91福利在线看| 国产精品久久777777换脸| 日韩免费性生活视频播放| 性xxxxbbbb| 最近中文字幕mv在线一区二区三区四区 | 91在线视频免费观看| 精品一区二区三区四区五区六区| 99久久免费精品| 久久久精品人妻无码专区| 国产欧美精品一区| 国产波霸爆乳一区二区| 亚洲国产成人91porn| 四虎永久在线精品| 欧美精品免费视频| 五月天激情开心网| 自拍亚洲一区欧美另类| 精品视频在线一区二区| 5252色成人免费视频| 日韩精品第二页| 精品国产乱码久久久久久郑州公司| 欧美手机在线| av在线播放亚洲| 经典一区二区三区| 制服.丝袜.亚洲.中文.综合懂| 国产清纯在线一区二区www| 久久网中文字幕| 欧美三区免费完整视频在线观看| 蜜桃av中文字幕| www亚洲精品| 中文日产幕无线码一区二区| 国产精品久久久久久久9999| 国产精品黄色片| 99国产视频在线| 久久激情电影| 国产在线青青草| 成人丝袜视频网| 日本黄色录像视频| 婷婷亚洲久悠悠色悠在线播放 | 日本午夜大片a在线观看| 国产精品va在线播放| 久久大胆人体视频| 午夜啪啪免费视频| 99国产精品久久久久久久| 青青草精品在线| 国产精品三级视频| 久久久久久亚洲av无码专区| 亚洲国产成人91精品| 91高清在线| 久久久久久久久久久人体| 韩国成人在线| 亚洲自拍小视频免费观看| 欧美禁忌电影网| 日韩精品视频一区二区在线观看| 丁香婷婷深情五月亚洲| 东方av正在进入| 7777精品伊人久久久大香线蕉最新版| 成年人免费在线视频| 日本亚洲欧美成人| 欧洲vs亚洲vs国产| 日韩精品视频在线观看视频| 精品一区二区三区视频| 国产精品久久久视频| 在线免费视频一区二区| 可以在线观看的av| 庆余年2免费日韩剧观看大牛| 中文字幕久久精品一区二区| 中文字幕一区二区三区最新| 日韩二区三区四区| 手机av在线不卡| 欧美三区免费完整视频在线观看| 成年人在线观看网站| 国产精品久久久久91| 日产精品一区二区| 精品久久久99| 亚洲美女视频在线| 一区二区国产欧美| 久久精品91久久香蕉加勒比| 亚洲欧洲自拍| 日本婷婷久久久久久久久一区二区 | 久久99久久99精品免观看粉嫩| 精品一区91| h无码动漫在线观看| 国产一区二区三区蝌蚪| 国产三级国产精品国产国在线观看| 欧美一区二区三区在线电影| 天堂va在线| 久久国产精品一区二区三区四区| 亚洲综合日本| 一区二区三区免费在线观看视频| 婷婷国产v国产偷v亚洲高清| 韩国av在线免费观看| 18性欧美xxxⅹ性满足| 国产欧美日韩| 中文字幕免费高清在线| 一区二区三区四区国产精品| 日本激情一区二区| 国产精品成av人在线视午夜片| 色综合天天爱| 91精品又粗又猛又爽| 日韩欧美在线观看| а√天堂官网中文在线| 国产成人免费电影| 久久字幕精品一区| 国产一二三四区| 亚洲国产精品va在线观看黑人| 日本电影欧美片| 亚洲一区二区三区午夜| 国产自产v一区二区三区c| 日韩欧美亚洲国产| 中文字幕欧美日韩| 国产精品网站在线看| 久久久精品麻豆| 亚洲国产精品综合小说图片区| 污污视频在线观看网站| 国产精品吹潮在线观看| 欧美一区成人| www.男人天堂| 欧美群妇大交群的观看方式| 含羞草www国产在线视频| 国产一区二区三区高清| 蜜桃精品视频在线| 中文字幕亚洲精品在线| 久久九九热免费视频| 玖玖玖免费嫩草在线影院一区| 孩娇小videos精品| 午夜私人影院久久久久| 久草在现在线| 国产精品香蕉视屏| 久久精品免费观看| 日韩成人免费在线视频|