NSThread

 1 多線程編程1--NSTread
 2 iOS中多線程編程方法有4種,3種經常使用的
 3 1.pThread (底層 c線程庫,不多用到)
 4 2.NSThread(oc線程庫,這篇博客將介紹一些關於它的知識)
 5 這種方法須要管理線程的生命週期、同步、加鎖問題,會致使必定的性能開銷
 6 3.NSOperation和NSOperationQueue(線程池/線程隊列)
 7 是基於oc實現的。NSOperation 以面向對象的方式封裝了須要執行的操做,而後能夠將這個操做放到一個NSOpreationQueue中去異步執行。沒必要關心線程管理、同步等問題
 8 4.GCD(Grand Centeral Dispatch)
 9 ios4纔開始支持,是純C語言的API.自ipad2開始,蘋果設備開始有了雙核CPU,爲了充分利用這2個核,GCD提供了一些新特性來支持多核並行編程
10 
11 下面進入NSTread的介紹
12 
13 一 、獲取當前線程
14 NSThread *current = [NSThread currentThread];
15 
16 2、獲取主線程
17 NSThread *mainThread = [NSThread mainThread];
18 NSLog(「主線程:%@「mianThread);
19 
20 打印結果是:
21 2015-08-28 21:36:38.599 thread[7499:c07] 主線程:<NSThread: 0x71434e0>{name = (null), num = 1}
22 num至關於線程的id,主線程的num是1
23 3、NSThread的建立
24 1.動態方法
25 -(id)initWithThread:(id)target selector:(SEL)selector object:(id)argument;
26 //建立
27 NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(doWCing) object:nil];
28 //能夠命名
29 thread.name = @「子線程」;
30 //使用alloc建立的線程,必定要顯示調用start方法,才能運行
31 [thread start];
32 //取消線程
33 [thread cancel];
34 2.靜態方法
35 +(void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;
36 //建立
37 [NSThread detachNewThreadSelector:@selector(doWCing) toTarget:self withObject:nil];
38 //取消
39 [NSThread exit];
40 
41 上面的兩種方式中的withObject:表明的是要傳入的參數
42 
43 4、暫停當前線程
44 [NSThread sleepForTimeInterval:2];//讓線程暫停2秒
45 
46 五。線程的其餘執行操做
47 1.在指定線程上執行操做
48 [self performSelector:@selector(run) onThread:thread withObject:nil waitUntilDone:YES];
49 上面代碼的意思是在thread這條線程上調用self的run方法,最後的YES表明:上面的代碼會阻塞,等run方法在thread線程執行完畢後,上面的代碼纔會經過
50 2.在主線程上執行操做
51 [self performSelectorOnMainThread:@selector(run) withObject:nil waitUntilDone:YES];
52 在主線程調用self的run方法
53 3.在當前線程執行操做
54 [self performSelector:@selector(run) withObject:nil];
55 在當前線程調用self的run方法。
56 
57 6、優缺點
58 1.優勢:NSThread 比其餘多線程方案較輕量級,更直觀地控制線程對象
59 2.缺點:須要本身管理線程的生命週期,線程同步。線程同步對數據的加鎖會有必定的性能開銷。
View Code
相關文章
相關標籤/搜索