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)--创建线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 42.对话框插件——dialog
- 下一篇: 当 IDENTITY_INSERT 设置