日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS学习之多线程(2)--创建线程

發布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS学习之多线程(2)--创建线程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自?http://www.cnblogs.com/wendingding/p/3805119.html


一、創建和啟動線程簡單說明

一個NSThread對象就代表一條線程

創建、啟動線程

(1) NSThread?*thread = [[NSThread?alloc]?initWithTarget:self?selector:@selector(run)?object:nil];

[thread?start];

//?線程一啟動,就會在線程thread中執行self的run方法

?

主線程相關用法

+ (NSThread?*)mainThread;?//?獲得主線程

- (BOOL)isMainThread;?//?是否為主線程

+ (BOOL)isMainThread;?//?是否為主線程

?

其他用法

獲得當前線程

NSThread?*current = [NSThread?currentThread];

?

線程的調度優先級:調度優先級的取值范圍是0.0 ~ 1.0,默認0.5,值越大,優先級越高

+ (double)threadPriority;

+ (BOOL)setThreadPriority:(double)p;

?

設置線程的名字

- (void)setName:(NSString?*)n;

- (NSString?*)name;

?

其他創建線程的方式

(2)創建線程后自動啟動線程???[NSThread?detachNewThreadSelector:@selector(run)?toTarget:self?withObject:nil];

(3)隱式創建并啟動線程??[self?performSelectorInBackground:@selector(run)?withObject:nil];

上述2種創建線程方式的優缺點

優點:簡單快捷

缺點:無法對線程進行更詳細的設置

二、代碼示例

1.使用古老的方式創建

// //??YYViewController.m // // //??Created?by?apple?on?14-6-23. //??Copyright?(c)?2014年?itcase.?All?rights?reserved. // #import?"YYViewController.h" #import?<pthread.h> @interface?YYViewController?() -?(IBAction)btnClick; @end@implementation?YYViewController-?(void)viewDidLoad {[super?viewDidLoad]; }//按鈕的點擊事件 -?(IBAction)btnClick?{//1.獲取當前線程NSThread?*current=[NSThread?currentThread];//主線程NSLog(@"btnClick----%@",current);???//2.使用for循環執行一些耗時操作pthread_t?thread;pthread_create(&thread,?NULL,?run,?NULL); } //c語言函數 void?*run(void?*data) {//獲取當前線程,是新創建出來的線程NSThread?*current=[NSThread?currentThread];for?(int?i=0;?i<10000;?i++)?{NSLog(@"btnClick---%d---%@",i,current);}return?NULL; } //多個線程,點擊按鈕執行按鈕調用方法的時候,主線程沒有被阻塞 @end

實現效果:

?

打印結果:

2.使用NSThread創建線程

// //??YYViewController.m // // //??Created?by?apple?on?14-6-23. //??Copyright?(c)?2014年?itcase.?All?rights?reserved. // #import?"YYViewController.h" #import?<pthread.h> @interface?YYViewController?() -?(IBAction)btnClick; @end @implementation?YYViewController? -?(void)viewDidLoad {[super?viewDidLoad]; } //按鈕的點擊事件 -?(IBAction)btnClick?{//1.獲取當前線程NSThread?*current=[NSThread?currentThread];//主線程NSLog(@"btnClick----%@",current);//獲取主線程的另外一種方式NSThread?*main=[NSThread?mainThread];NSLog(@"主線程-------%@",main);//2.執行一些耗時操作[self?creatNSThread]; //????[self?creatNSThread2]; //????[self?creatNSThread3]; }/***?NSThread創建線程方式1*?1>?先創建初始化線程*?2>?start開啟線程*/ -(void)creatNSThread {NSThread??*thread=[[NSThread?alloc]initWithTarget:self?selector:@selector(run:)?object:@"線程A"];//為線程設置一個名稱thread.name=@"線程A";//開啟線程[thread?start];NSThread??*thread2=[[NSThread?alloc]initWithTarget:self?selector:@selector(run:)?object:@"線程B"];//為線程設置一個名稱thread2.name=@"線程B";//開啟線程[thread2?start]; }/***?NSThread創建線程方式2 *創建完線程直接(自動)啟動*/ -(void)creatNSThread2 { //????NSThread?*thread=[NSThread?detachNewThreadSelector:@selector(run:)?toTarget:self?withObject:@"創建完線程直接(自動)啟動"];[NSThread?detachNewThreadSelector:@selector(run:)?toTarget:self?withObject:@"創建完線程直接(自動)啟動"]; } /***?NSThread創建線程方式3*?隱式創建線程,?并且直接(自動)啟動*/ -(void)creatNSThread3 {//在后臺線程中執行===在子線程中執行[self?performSelectorInBackground:@selector(run:)?withObject:@"隱式創建"]; } -(void)run:(NSString?*)str {//獲取當前線程NSThread?*current=[NSThread?currentThread];//打印輸出for?(int?i=0;?i<10;?i++)?{NSLog(@"run---%@---%@",current,str);} } @end

調用線程1,打印結果為:

調用線程2?

調用線程3?


轉載于:https://blog.51cto.com/5934497/1718198

總結

以上是生活随笔為你收集整理的IOS学习之多线程(2)--创建线程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。