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

iPhone SDK 多線程使用方法以及注意事項

移動開發(fā) iOS
本文介紹的iPhone SDK 多線程使用方法以及注意事項,很詳細的解決了我們常見的一些問題,心來看內容。

iPhone SDK 多線程使用方法以及注意事項是本文要介紹的內容,不多說,直接進入話題。雖然現(xiàn)在大部分PC應用程序都支持多線程/多任務的開發(fā)方式,但是在iPhone上,Apple并不推薦使用多線程的編程方式。但是多線程編程畢竟是發(fā)展的趨勢,而且據(jù)說即將推出的iPhone OS4將全
 
雖然現(xiàn)在大部分PC應用程序都支持多線程/多任務的開發(fā)方式,但是在iPhone上,Apple并不推薦使用多線程的編程方式。但是多線程編程畢竟是發(fā)展的趨勢,而且據(jù)說即將推出的iPhone OS4將全面支持多線程的處理方式。所以說掌握多線程的編程方式,在某些場合一定能挖掘出iPhone的更大潛力

從例子入手

先從一個例程入手,具體的代碼參考了這里。還有例程可以下載。多線程程序的控制模型可以參考這里,一般情況下都是使用 管理者/工人模型, 這里,我們使用iPhone SDK中的 NSThread 來實現(xiàn)它。

首先創(chuàng)建一個新的 View-based application 工程,名字為 "TutorialProject" 。界面如下圖所示,使用UILabel實現(xiàn)兩部分的Part(Thread Part和Test Part),Thread Part中包含一個UIProgressView和一個UIButton;而Test Part包含一個值和一個UISlider。如圖:

iPhone SDK 多線程使用方法以及注意事項

接下來,在 TutorialProjectViewController.h 文件中創(chuàng)建各個UI控件的 IBOutlets.

  1. @interface TutorialProjectViewController : UIViewController {  
  2.     // ------ Tutorial code starts here ------  
  3.     // Thread part  
  4.     IBOutlet UILabel *threadValueLabel;  
  5.     IBOutlet UIProgressView *threadProgressView;  
  6.     IBOutlet UIButton *threadStartButton;  
  7.     // Test part  
  8.     IBOutlet UILabel *testValueLabel;  
  9.     // ------ Tutorial code ends here ------  

同時,也需要創(chuàng)建outlets變量的property.

  1. @property (nonatomic, retain) IBOutlet UILabel *threadValueLabel;  
  2. @property (nonatomic, retain) IBOutlet UIProgressView *threadProgressView;  
  3. @property (nonatomic, retain) IBOutlet UIProgressView *threadStartButton;  
  4. @property (nonatomic, retain) IBOutlet UILabel *testValueLabel; 

接下來定義按鈕按下時的動作函數(shù),以及slider的變化函數(shù)。

  1. - (IBAction) startThreadButtonPressed:(UIButton *)sender;  
  2. - (IBAction) testValueSliderChanged:(UISlider *)sender;  
  3. 然后在 TutorialProjectViewController.m 文件中synthesize outlets,并在文件為實現(xiàn)dealloc釋放資源。  
  4. @synthesize threadValueLabel, threadProgressView, testValueLabel, threadStartButton;  
  5. ...  
  6. - (void)dealloc {  
  7.     // ------ Tutorial code starts here ------  
  8.     [threadValueLabel release];  
  9.     [threadProgressView release];  
  10.     [threadStartButton release];  
  11.     [testValueLabel release];  
  12.     // ------ Tutorial code ends here ------  
  13.     [super dealloc];  

現(xiàn)在開始線程部分的代碼,首先當 thread button 被按下的時候,創(chuàng)建新的線程.

  1. - (IBAction) startThreadButtonPressed:(UIButton *)sender {  
  2.     threadStartButton.hidden = YES;  
  3.     threadValueLabel.text = @"0";  
  4.     threadProgressView.progress = 0.0;  
  5.     [NSThread detachNewThreadSelector:@selector(startTheBackgroundJob) toTarget:self withObject:nil];  

該按鈕被按下后,隱藏按鈕以禁止多次創(chuàng)建線程。然后初始化顯示值和進度條,最后創(chuàng)建新的線程,線程的函數(shù)為 startTheBackgroundJob。具體的 startTheBackgroundJob 函數(shù)定義如下.

  1. - (void)startTheBackgroundJob {  
  2.  
  3.     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
  4.     // 線程開始后先暫停3秒(這里只是演示暫停的方法,你不是必須這么做的)  
  5.     [NSThread sleepForTimeInterval:3];  
  6.     [self performSelectorOnMainThread:@selector(makeMyProgressBarMoving) withObject:nil waitUntilDone:NO];  
  7.     [pool release];  

在第1行,創(chuàng)建了一個 NSAutoreleasePool 對象,用來管理線程中自動釋放的對象資源。這里 NSAutoreleasePool 在線程退出的時候釋放。這符合 Cocoa GUI 應用程序的一般規(guī)則。最后一行,阻塞調用(waitUntilDone狀態(tài)是ON)函數(shù) makeMyProgressBarMoving。

  1. - (void)makeMyProgressBarMoving {  
  2.  
  3.     float actual = [threadProgressView progress];  
  4.     threadValueLabel.text = [NSString stringWithFormat:@"%.2f", actual];  
  5.     if (actual < 1) {  
  6.         threadProgressView.progress = actual + 0.01;  
  7.         [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(makeMyProgressBarMoving) userInfo:nil repeats:NO];  
  8.     }  
  9.     else threadStartButton.hidden = NO;  

這里計算用于顯示的進度條的值,利用 NSTimer ,每0.5秒自增0.01,當值等于1的時候,進度條為100%,退出函數(shù)并顯示剛才被隱藏的按鈕。

最后,添加 UISlider 的實現(xiàn)函數(shù),用來更改主線程中 Test Part 中的 label 值。

  1. - (IBAction) testValueSliderChanged:(UISlider *)sender {  
  2. testValueLabel.text = [NSString stringWithFormat:@"%.2f", sender.value];  

編譯執(zhí)行,按下線程開始按鈕,你將看到進度條的計算是在后臺運行。如圖:

iPhone SDK 多線程使用方法以及注意事項

使用線程的注意事項

線程的堆棧大小

iPhone設備上的應用程序開發(fā)也是屬于嵌入式設備的開發(fā),同樣需要注意嵌入式設備開發(fā)時的幾點問題,比如資源上限,處理器速度等。

iPhone 中的線程應用并不是無節(jié)制的,官方給出的資料顯示iPhone OS下的主線程的堆棧大小是1M,第二個線程開始都是512KB。并且該值不能通過編譯器開關或線程API函數(shù)來更改。

你可以用下面的例子測試你的設備,這里使用POSIX Thread(pthread),設備環(huán)境是 iPhone 3GS(16GB)、SDK是3.1.3。 

  1. #include "pthread.h"  
  2.  
  3. void *threadFunc(void *arg) {  
  4.     void*  stack_base = pthread_get_stackaddr_np(pthread_self());  
  5.     size_t stack_size = pthread_get_stacksize_np(pthread_self());  
  6.     NSLog(@"Thread: base:%p / size:%u", stack_base, stack_size);  
  7.     return NULL;  
  8. }  
  9.  
  10. - (void)applicationDidFinishLaunching:(UIApplication *)application {  
  11.     void*  stack_base = pthread_get_stackaddr_np(pthread_self());  
  12.     size_t stack_size = pthread_get_stacksize_np(pthread_self());  
  13.     struct rlimit limit;  
  14.     getrlimit(RLIMIT_STACK, &limit);  
  15.     NSLog(@"Main thread: base:%p / size:%u", stack_base, stack_size);  
  16.     NSLog(@"  rlimit-> soft:%llu / hard:%llu", limit.rlim_cur, limit.rlim_max);  
  17.  
  18.     pthread_t thread;  
  19.     pthread_create(&thread, NULL, threadFunc, NULL);  
  20.  
  21.     // Override point for customization after app launch  
  22.     [window addSubview:viewController.view];  
  23.     [window makeKeyAndVisible];  

結果如下:

模擬器

  1. Main thread: base:0xc0000000 / size:524288  
  2. rlimit-> soft:8388608 / hard:67104768  
  3. Thread: base:0xb014b000 / size:524288 

設備

  1. Main thread: base:0x30000000 / size:524288  
  2. rlimit-> soft:1044480 / hard:1044480  
  3. Thread: base:0xf1000 / size:524288 

由此可見,當你測試多線程的程序時,模擬器和實際設備的堆棧大小是不一樣的。如果有大量遞歸函數(shù)調用可要注意了。

Autorelease

如果你什么都不考慮,在線程函數(shù)內調用 autorelease 、那么會出現(xiàn)下面的錯誤:

  1. NSAutoReleaseNoPool(): Object 0x********* of class NSConreteData autoreleased with no pool in place …. 

一般,在線程中使用內存的模式是,線程最初

  1. NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 

而在線程結束的時候 [pool drain] 或 [pool release]。

子線程中描畫窗口

多線程編程中普遍遵循一個原則,就是一切與UI相關的操作都有主線程做,子線程只負責事務,數(shù)據(jù)方面的處理。那么如果想在子線程中更新UI時怎么做呢?如果是在windows下,你會 PostMessage 一個描畫更新的消息,在iPhone中,需要使用performSelectorOnMainThread 委托主線程處理。

比如,如果在子線程中想讓 UIImageView 的 image 更新,如果直接在線程中

  1. imageView.image = [UIImage imageNamed:@"Hoge.png"]; 

這么做,什么也不會出現(xiàn)的。需要將該處理委托給主線程來做,像下面:

  1. [delegate performSelectorOnMainThread:@selector(theProcess:) withObject:nil waitUntilDone:YES]; 

就OK了!

小結:iPhone SDK多線程 使用方法以及注意事項的內容介紹完了,希望本文對你有所幫助。

轉自 http://www.yifeiyang.net/iphone-developer-advanced-11-multiple-threads-of-use-and-precautions/

責任編輯:zhaolei 來源: CocoaChina
相關推薦

2011-08-01 12:53:25

iPhone 多線程 線程

2024-02-01 09:39:02

asyncawaitPromise

2011-06-14 15:25:28

C++多線程

2011-07-25 17:48:10

iPhone 內存

2012-03-11 18:46:18

iPhone4S

2011-07-04 17:55:59

Qt SDK Windows

2025-04-03 07:33:56

2011-07-21 15:40:24

iPhone 內存管理 對象

2010-08-12 09:39:26

FlexaddChil

2010-07-27 14:17:52

Flex SDK4

2009-06-12 09:46:40

Java String

2014-05-16 10:04:19

JavaScriptthis原理

2012-06-13 02:02:43

ServletJavaJSP

2017-04-06 09:49:55

Hive注意事項優(yōu)化

2011-07-06 11:13:29

iOS游戲開發(fā)

2010-11-26 16:27:01

MySQL使用變量

2011-07-19 10:16:58

噴墨打印機注意事項

2010-01-18 14:25:19

使用C++Builde

2022-09-23 09:25:04

代碼方法

2011-06-23 11:15:25

SEO網(wǎng)站優(yōu)化
點贊
收藏

51CTO技術棧公眾號

一本大道久久a久久综合婷婷 | 精品一区二区三区香蕉蜜桃 | 日韩黄色小视频| 中文字幕无线精品亚洲乱码一区 | 国产校园另类小说区| 国产精品色婷婷视频| 黄色一级视频在线观看| 色婷婷精品视频| 欧美日韩aaaaa| 日本中文字幕网址| 日日夜夜精品一区| 丰满亚洲少妇av| 国产精品久久av| 久久免费精彩视频| 成人影院天天5g天天爽无毒影院| 日韩欧美另类在线| 丁香婷婷激情网| 日韩激情av| 中文字幕av一区二区三区| 超碰97网站| 中文字幕在线播放日韩| 亚洲经典三级| 萌白酱国产一区二区| 日本xxx在线播放| 欧美专区视频| 欧美日韩一区高清| 北条麻妃在线一区| av电影免费在线看| 亚洲日本一区二区| 亚洲黄色成人久久久| 少妇激情av一区二区| 国产精品一二三四| 国产在线精品一区免费香蕉| 日本中文字幕第一页| 国产一区二区中文| 久久99热这里只有精品国产| 日韩一区二区三区四区视频| 精品免费视频| 亚洲精品一区二区在线| 午夜剧场免费看| 一区二区三区国产好| 欧美精品色一区二区三区| 天天天干夜夜夜操| 一区二区视频免费完整版观看| 精品毛片三在线观看| av女优在线播放| 黄色成人在线网| 亚洲激情成人在线| 91大学生片黄在线观看| 黄色免费在线观看| 亚洲精品日韩一| 久久精品在线免费视频| 成人在线视频亚洲| 亚洲卡通欧美制服中文| 男人天堂成人网| av网站在线看| 一个色综合网站| 久久国产精品网| 国产黄大片在线观看| 五月婷婷另类国产| 又粗又黑又大的吊av| 黄色污网站在线观看| 福利视频导航一区| 凹凸日日摸日日碰夜夜爽1| 偷拍视频一区二区三区| 欧美视频一区二区三区四区| 国产精品视频中文字幕| av一级久久| 欧美va亚洲va香蕉在线| av黄色一级片| 九九久久婷婷| 色偷偷av亚洲男人的天堂| 乱老熟女一区二区三区| 欧美一区二区三区久久精品| 欧美人与物videos| 久久久久久久久久影院| 老司机精品导航| 国产欧美日韩精品在线观看| 999av视频| 99久久久免费精品国产一区二区| 蜜桃在线一区二区三区精品| av播放在线观看| 亚洲美女偷拍久久| 131美女爱做视频| 不卡亚洲精品| 精品免费一区二区三区| 变态另类丨国产精品| 日韩aaaa| 性日韩欧美在线视频| 一级黄色av片| 国产91精品在线观看| 你懂的视频在线一区二区| 色网站在线看| 欧美日韩在线一区| 亚洲天堂2018av| 国产丝袜一区| 综合136福利视频在线| 黄色在线观看免费| 日韩**一区毛片| 国产精品对白一区二区三区| 国产午夜在线观看| 亚洲一区二区精品视频| 男女爽爽爽视频| eeuss鲁片一区二区三区 | 日本蜜桃在线观看| 五月天一区二区| 亚洲男人天堂av在线| 希岛爱理av免费一区二区| www.日本久久久久com.| 九九热在线免费观看| 国产一区二区在线免费观看| 日本不卡久久| 超碰激情在线| 日韩视频在线你懂得| 永久免费毛片在线观看| 亚洲大片av| 亚洲va男人天堂| 97在线观看免费观看高清| 亚洲成人激情综合网| 97人人爽人人| 第一社区sis001原创亚洲| 97成人精品区在线播放| 国产www视频| 国产精品久久久久久亚洲毛片| 日韩免费视频播放| 亚洲日本va中文字幕| 麻豆国产精品va在线观看不卡| 久久久久久亚洲av无码专区| 成人高清视频在线| 久久久99精品视频| 亚洲人体在线| 日韩中文字幕在线视频| 亚洲精品国产无码| 久久精品夜夜夜夜久久| 免费在线观看亚洲视频| 66精品视频在线观看| 欧美成人小视频| 97人妻人人澡人人爽人人精品| 欧美国产精品一区| 99视频免费播放| 国产精品手机在线播放| 4438全国成人免费| 天天色天天操天天射| 亚洲一区二区精品久久av| 红桃视频一区二区三区免费| 亚洲破处大片| 亚洲最大激情中文字幕| av在线下载| 日韩一级成人av| 农村黄色一级片| 国产高清久久久久| 8x8x华人在线| 高潮久久久久久久久久久久久久| 欧美大秀在线观看| 亚洲国产中文字幕在线| 亚洲国产综合在线| 亚洲 欧美 日韩在线| 国户精品久久久久久久久久久不卡| 99免费在线观看视频| av在线免费网址| 亚洲成av人影院在线观看| 成人免费看片98| 不卡影院免费观看| 免费看一级大黄情大片| 宅男在线一区| 国产精品久久久久秋霞鲁丝 | 国产乱论精品| 欧美性受xxxx白人性爽| 国产在线观看网站| 4438成人网| 久久精品视频久久| 久久综合色婷婷| 日韩一级免费片| 国产精品v欧美精品v日本精品动漫| 国产精品免费视频一区二区| 欧美极度另类| 久久天天躁日日躁| 天堂网2014av| 欧美在线影院一区二区| 日本一级二级视频| 成人免费毛片嘿嘿连载视频| 哪个网站能看毛片| 水蜜桃精品av一区二区| 国产精品对白刺激久久久| 大胆人体一区| 精品视频9999| 国产黄色片在线播放| 91精品国产入口| 波多野结衣国产| 国产精品国产精品国产专区不片| 韩国三级在线看| 久久亚洲一区| 日韩精品福利片午夜免费观看| 色天天色综合| 5g国产欧美日韩视频| 国产精品粉嫩| 久久99精品久久久久久噜噜 | 欧美高清在线精品一区| 下面一进一出好爽视频| 久久av最新网址| 好吊色视频988gao在线观看| 欧美热在线视频精品999| av成人午夜| 91九色综合| 97久久超碰福利国产精品…| 岛国中文字幕在线| 亚洲色图50p| 噜噜噜久久,亚洲精品国产品| 在线精品视频小说1| 国产一级片免费看| 国产精品久久久久一区| 无码人妻精品一区二区中文| 国产1区2区3区精品美女| jizz欧美激情18| 9久re热视频在线精品| 日韩video| 欧美日韩老妇| 欧美一区二区三区在线免费观看| 在线精品自拍| 亚洲一区二区三区乱码aⅴ| 浪潮色综合久久天堂| 久久久在线视频| 91麻豆免费在线视频| 日韩中文在线不卡| 国产免费av高清在线| 亚洲国产欧美一区| 亚洲高清视频在线播放| 在线播放亚洲一区| 最好看的日本字幕mv视频大全| 五月综合激情网| 国产精品18p| 一区二区三区欧美在线观看| 中国毛片直接看| 国产精品国产a| 国产无遮挡在线观看| 久久久综合精品| www.88av| 91免费观看视频| 欧美精品欧美极品欧美激情| 成人动漫一区二区在线| 99久久综合网| 成人精品视频.| av在线天堂网| 国产sm精品调教视频网站| 在线观看免费看片| 高清不卡在线观看| 国产伦理在线观看| 成人动漫一区二区| 久久久久久久久免费看无码| 91欧美一区二区| 久久国产精品影院| 国产三级精品视频| 中国特黄一级片| 中文字幕一区二区视频| 麻豆精品国产免费| 一区二区视频在线| 美女的奶胸大爽爽大片| 午夜影院在线观看欧美| 99久久精品国产亚洲| 色八戒一区二区三区| 中文字幕一区二区三区四区视频| 欧美三级电影一区| 国产精品亚洲欧美在线播放| 欧美成人video| 色呦呦免费观看| 亚洲人成网站免费播放| 成年人免费在线视频| 久久久久999| 国产第一页在线| 日韩美女在线播放| 先锋影音一区二区| 国产精品久久久久久久久久直播 | 国产日韩欧美中文字幕| 欧美精品日日鲁夜夜添| 性少妇videosexfreexxx片| 精品国产一区二区亚洲人成毛片| 污污的视频网站在线观看| 亚洲日本中文字幕| 成年人网站在线| 91精品国产99| 国产福利亚洲| 国产精华一区| 精品视频亚洲| 国产成人生活片| 欧美中文日韩| 中文字幕 欧美 日韩| 91美女视频网站| 中文字幕av播放| 欧美日韩在线影院| 国产日产亚洲系列最新| 日韩av在线一区| 日本免费在线视频| 欧美中文在线字幕| 国产精品一区二区三区av| 国产伦精品一区二区三区四区免费 | 国产一二三四五区| 亚洲黄色小视频| 无码aⅴ精品一区二区三区| 欧美一级免费观看| 国内av一区二区三区| 九九热精品视频| 99精品国自产在线| 国精产品99永久一区一区| 91中文字幕精品永久在线| 久久综合九色综合88i| 国产精品亚洲午夜一区二区三区| 国产美女免费网站| 婷婷丁香久久五月婷婷| 国产精选久久久| 国产一区二区美女视频| 国产伦久视频在线观看| 成人网在线视频| 国产探花在线精品| 成人免费aaa| 成人国产一区二区三区精品| 粉嫩av性色av蜜臀av网站| 91豆麻精品91久久久久久| 手机在线观看免费av| 欧美日本黄视频| www.91精品| 亚洲一区二区在线看| 久久久成人网| 扒开伸进免费视频| 亚洲美女视频一区| 国产欧美日韩成人| xxxxx成人.com| 成人毛片免费| 日韩国产精品一区二区三区| 亚洲综合欧美| 中文字幕在线永久| 亚洲成人精品一区| 天天摸夜夜添狠狠添婷婷| 久久久噜噜噜久久| 成人看片黄a免费看视频| 国产黄色激情视频| 国产精品18久久久久久久久| 青草影院在线观看| 欧美一区二区三区不卡| 二区在线播放| 91久久久一线二线三线品牌| 中文字幕一区二区三区欧美日韩 | 久久成人福利视频| 成人听书哪个软件好| 国产精品成人国产乱| 精品国产一区二区国模嫣然| 深夜国产在线播放| 高清视频一区二区三区| 欧美精品网站| 久久久久亚洲无码| 天天综合日日夜夜精品| 深夜视频在线免费| 欧美综合国产精品久久丁香| 亚洲宅男一区| 一区二区三区视频在线观看免费| 欧美国产欧美综合| 国产乱码精品一区二区三区精东| 久久国产精品久久久久| 8x国产一区二区三区精品推荐| 91精品国产91久久久久麻豆 主演| 成人av网址在线| 五月天激情四射| 色婷婷综合成人| av综合网页| 日韩中文字幕在线视频观看| 久久久国产精品麻豆| 一级特黄特色的免费大片视频| 久热国产精品视频| 精品淫伦v久久水蜜桃| 日韩a在线播放| 国产精品的网站| www.色日本| 日本欧美中文字幕| 久久婷婷蜜乳一本欲蜜臀| 妖精视频在线观看| 欧美日韩在线视频一区二区| 国产51人人成人人人人爽色哟哟| 成人在线视频网站| 一区久久精品| 亚洲第一综合网| 日韩欧美在线影院| 男人天堂视频在线观看| 亚洲午夜在线观看| 处破女av一区二区| 老熟妇一区二区三区| 欧美成人精品一区二区三区| 久久综合另类图片小说| 日韩爱爱小视频| 亚洲国产日韩一级| 尤物网址在线观看| 国产精品日韩高清| 老妇喷水一区二区三区| 久久精品第一页| 亚洲欧洲在线观看| 日韩中文字幕无砖| 久久久精品麻豆| 亚洲二区视频在线| 秋霞成人影院| 欧美美乳视频网站在线观看| 国产经典欧美精品| 国产精品露脸视频|