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.缺點:須要本身管理線程的生命週期,線程同步。線程同步對數據的加鎖會有必定的性能開銷。