精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日韩亚洲一区在线播放| 欧美精品999| 爱爱爱爱免费视频| 亚洲无线看天堂av| 97国产一区二区| 国产精品免费在线免费| 538任你躁在线精品视频网站| 亚洲国产精品免费视频| 性做久久久久久| 亚欧洲精品在线视频免费观看| 国产欧美久久久| 亚洲一区欧美激情| 久久精品99久久香蕉国产色戒| 97精品人妻一区二区三区蜜桃| 国产亚洲一区二区手机在线观看 | 亚洲国产精品国自产拍av秋霞| 国产精品wwwww| 天堂av中文在线| 欧美激情一区在线| 国内外成人免费视频| 在线视频1卡二卡三卡| 1024成人| 欧美成人午夜剧场免费观看| 天天躁夜夜躁狠狠是什么心态| 日韩成人久久| 欧美日韩一区二区三区高清 | 日韩女优一区二区| 国产精品免费99久久久| 亚洲精品一线二线三线| 伊人影院综合在线| 新片速递亚洲合集欧美合集| 午夜影院久久久| 无颜之月在线看| 1024国产在线| 国产日产欧美一区二区视频| 国产主播一区二区三区四区| av中文字幕免费在线观看| 日韩成人一区二区| 国产精品va在线| 精品国产一区二区三区四| 狠狠入ady亚洲精品| 久久精品一偷一偷国产| 黄色三级生活片| 西野翔中文久久精品国产| 亚洲成av人片在线观看香蕉| 在线观看视频在线观看| 欧美男女视频| 欧美亚洲国产怡红院影院| 午夜精品久久久内射近拍高清| 国产乱码在线| 亚洲国产中文字幕| a级黄色小视频| 白白色在线观看| 亚洲国产日韩在线一区模特| 奇米777四色影视在线看| 粗大黑人巨茎大战欧美成人| 国产精品伦一区二区三级视频| 日韩精品第一页| 第一页在线观看| 中文乱码免费一区二区| 神马欧美一区二区| 日本精品在线| 亚洲欧美综合在线精品| 国产一二三四五| 性欧美videos高清hd4k| 亚洲一区二区视频| 欧洲精品一区二区三区久久| 九色porny丨入口在线| 天天综合网天天综合色| 久久久噜噜噜www成人网| 成人va天堂| 欧美三级中文字| www.51色.com| 国产欧美一区二区三区米奇| 日韩电影大片中文字幕| 国产精品20p| 99视频精品全国免费| 欧美成人性生活| 黄色片视频网站| 日韩电影在线一区二区三区| 91精品国产综合久久香蕉的用户体验 | 同心难改在线观看| 99久久精品免费精品国产| 欧美最大成人综合网| 在线观看免费网站黄| 亚洲视频在线观看三级| 久久久久久免费看| 久久野战av| 日韩午夜在线观看视频| 一女三黑人理论片在线| 色135综合网| 欧美激情精品久久久久久蜜臀| 国产手机在线视频| 久久99精品国产| 国产精品二区三区| 国产免费a∨片在线观看不卡| 成人欧美一区二区三区黑人麻豆 | www.97av.com| xf在线a精品一区二区视频网站| 日韩中文一区| 免费网站在线观看人| 91久久线看在观草草青青| 亚洲一二区在线观看| 午夜欧洲一区| 欧美另类xxx| 波多野结衣家庭主妇| 国产成人在线色| 天堂精品一区二区三区| av成人福利| 欧美一区二区视频在线观看| 香蕉视频黄色在线观看| 伊人久久大香线蕉精品组织观看| 欧美亚洲成人免费| 精品毛片一区二区三区| 中文字幕成人网| 色综合久久久久无码专区| 国产精品一区二区三区四区在线观看| 精品调教chinesegay| 青春草免费视频| 精品夜夜嗨av一区二区三区| 美媛馆国产精品一区二区| 宅男在线观看免费高清网站| 欧美日韩在线一区二区| 加勒比精品视频| 91精品一区二区三区综合| 国产精品jvid在线观看蜜臀 | 99久久国产综合精品女不卡| 在线无限看免费粉色视频| sese综合| 亚洲国产日韩精品在线| 欧美日韩亚洲国产另类| 国产麻豆精品一区二区| 一区二区在线观| 欧美日韩精品一区二区三区视频| 日韩av在线天堂网| 精品无码人妻一区二区三| 极品销魂美女一区二区三区| 日韩福利影院| 91看片一区| 亚洲欧美日韩国产中文专区| 日本午夜视频在线观看| 成人一区二区三区| av在线免费观看国产| 久久国产精品美女| 久青草国产97香蕉在线视频| 伊人网综合在线| 欧美国产在线观看| 日本在线观看免费视频| 欧美少妇性xxxx| 国产精品一二区| 69视频在线观看| 欧美日韩亚洲综合| 韩国一级黄色录像| 狠狠色综合色综合网络| 国产四区在线观看| 国产一区二区在线观| 久久6免费高清热精品| 亚洲av无码专区在线| 亚洲一区二区三区四区五区黄 | 九色91popny| 青青草综合网| 亚洲va电影大全| 青春草在线视频| 日韩av最新在线| 337p粉嫩色噜噜噜大肥臀| 国产日韩精品视频一区| 中文字幕色网站| 欧美伊人久久| 久久青青草原| 欧美va在线观看| 在线视频中文亚洲| 国产丰满果冻videossex| 亚洲午夜三级在线| 中文字幕丰满孑伦无码专区| 日韩影院在线观看| 中文精品视频一区二区在线观看| 电影91久久久| 国自产精品手机在线观看视频| 污视频网站免费观看| 在线中文字幕一区二区| 极品魔鬼身材女神啪啪精品| 高清久久久久久| 国产高清精品在线观看| 欧美电影免费观看高清| 成人在线免费观看一区| 在线观看精品| 欧美尺度大的性做爰视频| 亚洲三区在线播放| 欧美无砖砖区免费| 久久久久久久久97| 国产日韩视频一区二区三区| 99中文字幕在线| 国产视频一区三区| 人人妻人人澡人人爽精品欧美一区| 超碰成人免费| 国产精品视频久| av资源新版天堂在线| 中文字幕无线精品亚洲乱码一区 | 久久人人爽人人爽| 男女污污视频网站| 久久久久国产精品一区二区| 在线观看18视频网站| 婷婷综合一区| 91视频99| 成人精品电影在线| 国语自产在线不卡| av在线播放观看| 国产一区二区三区三区在线观看| www.av在线.com| 在线观看网站黄不卡| 日本网站免费观看| 亚洲精品自拍动漫在线| 国产91丝袜美女在线播放| 成人激情黄色小说| 992kp免费看片| 日韩av高清在线观看| 日本www在线视频| 欧美在线1区| 亚洲一二三区在线| 国产一区二区三区四区五区传媒| 国产98在线|日韩| 99精品女人在线观看免费视频| 国产不卡视频在线| 黄色18在线观看| 欧美激情精品久久久久久| 成视频免费观看在线看| 视频在线观看99| 福利视频在线播放| 亚洲人成在线免费观看| 亚洲三级黄色片| 亚洲精品第一页| 亚洲精品久久久久久无码色欲四季 | 国产精品一区二区av白丝下载| 色av成人天堂桃色av| 毛片毛片女人毛片毛片| 亚洲国产裸拍裸体视频在线观看乱了| 欧美日韩色视频| 国产精品免费久久| 亚洲色图 激情小说| 国产欧美一区二区精品性色 | 亚洲精品国产精| 欧美一区三区二区| 91超薄丝袜肉丝一区二区| 欧美影院一区二区三区| 亚洲性猛交富婆| 欧美亚洲自拍偷拍| 亚洲成人av网址| 91福利在线播放| 中文字幕人妻丝袜乱一区三区| 一本久久a久久免费精品不卡| 日韩在线视频免费播放| 狠狠久久五月精品中文字幕| 国产精品999在线观看| 性做久久久久久免费观看| 99热国产在线观看| 欧美性生交大片免费| av图片在线观看| 欧洲一区二区三区在线| 中文字幕在线视频第一页| 欧美日韩亚洲国产综合| 国产精品国产精品国产专区| 欧美一区二区三区四区视频| 精品久久无码中文字幕| 精品精品国产高清a毛片牛牛| 风流老熟女一区二区三区| 亚洲精品xxxx| 国产精品一区二区婷婷| 色婷婷综合成人av| 手机电影在线观看| 97超视频免费观看| 91精品美女| 999国内精品视频在线| 欧美精品中文字幕亚洲专区| 欧美久久久久久久| 99久久夜色精品国产亚洲1000部| 99亚洲国产精品| 国产精品入口66mio| 网站一区二区三区| 国产一区二区三区视频在线播放| 激情av中文字幕| 久久嫩草精品久久久精品| 午夜激情视频在线播放| 黄色成人在线播放| 在线播放亚洲精品| 亚洲成人精品久久| 国产一区二区三区不卡在线| 美女扒开尿口让男人操亚洲视频网站| 2020日本在线视频中文字幕| 国产精品电影网| 成人资源在线| 四虎永久国产精品| 亚洲理伦在线| 久久精品亚洲天堂| 2024国产精品视频| 亚洲综合视频网站| 欧美日韩在线一区| 国产男女无套免费网站| 日韩久久精品成人| 日本三级韩国三级欧美三级| 国产成人精品免费视频| 日韩黄色av| 亚洲成人午夜在线| 99精品视频免费| 天天操精品视频| 中文字幕精品—区二区四季| 亚洲一区欧美在线| 欧美一区欧美二区| caoporn国产精品免费视频| 欧美激情视频在线观看| 成人精品一区二区三区电影| 国产视频一区二区不卡| 久久久久久美女精品| 黄色高清无遮挡| 99久久婷婷国产综合精品电影 | 91在线视频| 97在线看福利| 日韩一区免费| 97精品国产97久久久久久粉红| 久久一区二区三区超碰国产精品| 97精品人人妻人人| 亚洲免费观看高清| 一级二级三级视频| 在线观看亚洲视频| 超碰一区二区| 精品蜜桃传媒| 欧美亚韩一区| 在线播放国产视频| 亚洲免费在线视频| 国产精品久久婷婷| 日日狠狠久久偷偷四色综合免费| 日韩成人动漫| 欧美日韩精品久久| 亚洲欧美大片| 久久人人爽人人爽人人片| 亚洲成va人在线观看| 亚洲免费成人网| 欧美人在线观看| 一区二区在线免费播放| 日韩视频 中文字幕| 国产毛片精品视频| 欧美黑吊大战白妞| 欧美成va人片在线观看| 亚洲羞羞网站| 国产99午夜精品一区二区三区| 欧美久久一级| 久久久久亚洲av无码网站| 一区二区三区欧美| 高潮毛片7777777毛片| 欧美国产日韩免费| jizz久久精品永久免费| 加勒比成人在线| 91尤物视频在线观看| www.国产一区二区| 亚洲最大在线视频| 香蕉成人在线| 警花观音坐莲激情销魂小说| 国产精品亚洲第一区在线暖暖韩国| 午夜爽爽爽男女免费观看| 日韩三级中文字幕| 97蜜桃久久| 日本精品一区二区三区高清 久久| 久热re这里精品视频在线6| 调教驯服丰满美艳麻麻在线视频| 精品视频在线免费观看| 国产在线1区| 国产精品 日韩| 国产精品美女久久久浪潮软件| 在线不卡av电影| 欧美日产在线观看| 欧美xxxx少妇| 免费久久99精品国产自| 美腿丝袜亚洲一区| 九九九久久久久| 日韩电影第一页| 日韩国产一二三区| 性一交一乱一伧国产女士spa| 97超碰欧美中文字幕| 少妇无套内谢久久久久| 久久av中文字幕| 欧美成人午夜77777| 国产v亚洲v天堂无码久久久| 亚洲欧洲日韩综合一区二区| 亚洲AV午夜精品| 国产精品久久久久久久美男| 我不卡影院28| 一本色道综合久久欧美日韩精品 | 日本免费一区二区三区视频观看| 欧美r级电影| 老熟妇精品一区二区三区| 欧美三区在线观看| av电影在线地址| 手机成人av在线| 91麻豆福利精品推荐| 国产精品亚洲欧美在线播放| 欧美一区二区三区四区在线| 婷婷亚洲最大| 蜜桃传媒一区二区亚洲av| 欧美一区二区三区在| 欧美大片免费观看网址| 日本一区二区三区四区五区六区|