IOS 有三種多線程編程的技術(shù):
1.NSThread
2.Cocoa NSOperation
3.GCD(全稱:Grand Central Dispatch
NSThread
優(yōu)點:NSThread 比其他兩個更輕量級
缺點:需要自己管理線程的生命周期究孕,線程同步。 線程同步對數(shù)據(jù)的加鎖會有一定的開銷。
NSThread 方法總結(jié)
創(chuàng)建線程
/*
selector :線程執(zhí)行的方法获雕,這個 selector 只能有一個參數(shù)蕴掏,而且不能有返回值沧烈。
target :selector 消息發(fā)送的對象
argument: 傳輸給 target 的唯一參數(shù)够委,也可以是 nil
*/
//線程對象初始化時創(chuàng)建一個線程 (指定線程函數(shù))
- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument
// 通過類方法創(chuàng)建一個線程
+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument
第一種方式會立即創(chuàng)建一個線程并執(zhí)行 selector 方法扰魂,
第二種方式是先創(chuàng)建線程對象傅物,要直到我們手動調(diào)用 start 啟動線程 時才會真正去創(chuàng)建并啟動線程 夯辖。在運行線程操作前可以設(shè)置線程的優(yōu)先級等線程信息。
1董饰、[NSThread detachNewThreadSelector:@selector(doSomething:) toTarget:self withObject:nil];
2蒿褂、NSThread* myThread = [[NSThread alloc] initWithTarget:self
selector:@selector(doSomething:)
object:nil];
[myThread start];
補充:如果要更新 UI 必須回到主線程中, 可以用 performSelectorOnMainThread 回到主線程(更新 UI 的話必須到主線程),用或者調(diào)用或者調(diào)用 委托函數(shù)卒暂,在主線程中實現(xiàn)委托函數(shù)啄栓。
不顯式創(chuàng)建線程的方法
其效果與 NSThread 的 detachNewThreadSelector:toTarget:withObject: 是一樣的。
[Obj performSelectorInBackground:@selector(doSomething) withObject:nil];
// 返回當前線程
+ (NSThread *)currentThread;
// 判斷是否為多線程
+ (BOOL)isMultiThreaded;
// 判斷當前線程是否為主線程
- (BOOL)isMainThread;
+ (BOOL)isMainThread;
+ (NSThread *)mainThread;
暫停當前線程幾秒
[NSThread sleepForTimeInterval:4];
// 是否在執(zhí)行
- (BOOL)isExecuting;
// 是否已經(jīng)結(jié)束
- (BOOL)isFinished;
// 是否取消的
- (BOOL)isCancelled;
// 取消操作
- (void)cancel;
// 退出線程
+ (void)exit;