IOS NSThread总结

IOS 有三种多线程编程的技术:

1.NSThread
2.Cocoa NSOperation
3.GCD(全称:Grand Central Dispatch

NSThread

优点:NSThread 比其他两个更轻量级
缺点:需要自己管理线程的生命周期,线程同步。 线程同步对数据的加锁会有一定的开销。

NSThread 方法总结
创建线程
/*
  selector :线程执行的方法,这个 selector 只能有一个参数,而且不能有返回值。
  target  :selector 消息发送的对象
  argument: 传输给 target 的唯一参数,也可以是 nil
*/
//线程对象初始化时创建一个线程 (指定线程函数)
- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument 

// 通过类方法创建一个线程
+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument

第一种方式会立即创建一个线程并执行 selector 方法,
第二种方式是先创建线程对象,要直到我们手动调用 start 启动线程 时才会真正去创建并启动线程 。在运行线程操作前可以设置线程的优先级等线程信息。


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 的话必须到主线程),用或者调用或者调用 委托函数,在主线程中实现委托函数。

不显式创建线程的方法
其效果与 NSThread 的 detachNewThreadSelector:toTarget:withObject: 是一样的。

[Obj performSelectorInBackground:@selector(doSomething) withObject:nil];
// 返回当前线程
+ (NSThread *)currentThread;      

// 判断是否为多线程
+ (BOOL)isMultiThreaded;

// 判断当前线程是否为主线程
- (BOOL)isMainThread;
+ (BOOL)isMainThread;

+ (NSThread *)mainThread;
暂停当前线程几秒
[NSThread sleepForTimeInterval:4];

// 是否在执行
- (BOOL)isExecuting;

// 是否已经结束 
- (BOOL)isFinished;

// 是否取消的
- (BOOL)isCancelled;

// 取消操作
- (void)cancel;

//  退出线程
+ (void)exit;

你可能感兴趣的:(IOS NSThread总结)