1、簡介:
1.1 iOS有三種多線程編程的技術,分別是:
1.、NSThread
2、Cocoa NSOperation (iOS多線程編程之NSOperation和NSOperationQueue的使用)
3、GCD 全稱:Grand Central Dispatch( iOS多線程編程之Grand Central Dispatch(GCD)介紹和使用)
這三種編程方式從上到下,抽象度層次是從低到高的,抽象度越高的使用越簡單,也是Apple最推薦使用的。
這篇我們主要介紹和使用NSThread,后面會繼續2、3 的講解和使用。
1.2 三種方式的優缺點介紹:
NSThread:
優點:NSThread 比其他兩個輕量級
缺點:需要自己管理線程的生命周期,線程同步。線程同步對數據的加鎖會有一定的系統開銷
NSThread實現的技術有下面三種:
一般使用cocoa thread 技術。
Cocoa operation
優點:不需要關心線程管理,數據同步的事情,可以把精力放在自己需要執行的操作上。
Cocoa operation 相 關的類是 NSOperation ,NSOperationQueue。NSOperation是個抽象類,使用它必須用它的子類,可以實現它或者使用 它定義好的兩個子類:NSInvocationOperation 和 NSBlockOperation。創建NSOperation子類的對象,把對 象添加到NSOperationQueue隊列里執行。
GCD
Grand Central Dispatch (GCD) 是Apple開發的一個多核編程的解決方法。在iOS4.0開始之后才能使用。GCD是一個替代諸如 NSThread, NSOperationQueue, NSInvocationOperation等技術的很高效和強大的技術?,F在的iOS系統都 升級到6了,所以不用擔心該技術不能使用。
介紹完這三種多線程編程方式,我們這篇先介紹NSThread的使用。
2、NSThread的使用
2.1 NSThread 有兩種直接創建方式:
- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument
+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument
第一個是實例方法,第二個是類方法
[NSThread detachNewThreadSelector:@selector(doSomething:) toTarget:self withObject:nil];
NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(doSomething:) object:nil];
[myThread start];
2.2參數的意義:
selector :線程執行的方法,這個selector只能有一個參數,而且不能有返回值。
target :selector消息發送的對象
argument:傳輸給target的唯一參數,也可以是nil
第一種方式會直接創建線程并且開始運行線程,第二種方式是先創建線程對象,然后再運行線程操作,在運行線程操作前可以設置線程的優先級等線程信息
2.3 PS:不顯式創建線程的方法:
用NSObject的類方法 performSelectorInBackground:withObject: 創建一個線程:
[Obj performSelectorInBackground:@selector(doSomething) withObject:nil];
2.4 下載圖片的例子:
2.4.1 新建singeView app
新建項目,并在xib文件上放置一個imageView控件。按住control鍵拖到viewController.h文件中創建imageView IBOutlet ViewController.m中實現:
// ViewController.m
// NSThreadDemo
//
// Created by rongfzh on 12-9-23.
新聞熱點
疑難解答