废话不多说,直奔主题。今天简单介绍下IOS中的三种创建线程的方法
- 创建NSThread对象
NSThread *t = [[NSThread alloc] initWithTarget:self selector:@selector(functionName) object:nil];
[t start];
这是个典型的target-action方式,指定目标为self,执行动作为functionName,object为functionName的参数。调用start方法后,线程会执行functionName这个函数,此函数没有返回值。
2 创建一个类继承NSThread类,并覆盖main方法。
@interface MyThread : NSThread
@end
@implementation MyThread
- (void) main
{
xxxxx.....
}
@end
- (void)function
{
MyThread *t = [[MyThread alloc] init];
[t start];
}
在需要开启线程的地方创建MyThread对象,并调用start方法启动线程,便会执行到MyThread类中的main方法。
3 使用detach静态方法
[NSThread detachNewThreadSelector:@selector(functionName) toTarget:self withObject:nil];
使用detach静态方法不需要调用start方法便可直接启动线程,执行functionName方法。同样,withObject是functionName需要的参数。
介绍完线程的创建方法后,顺带介绍下线程的状态及睡眠和退出方法。
IOS中线程有三个状态,executing cancel finished。但是cancel和finished状态到底有什么用现在我还不知道,以后再来补充
sleepUntilDate
线程一直睡眠,直到某一时刻苏醒,执行动作。sleepForTimeInterval
使线程睡眠多少秒,类似于linux中的sleep函数。exit
[NSThread exit];
退出线程。类似于linux中的exit函数。cancel
NSThread *t;
[t cancel];
设置线程状态为取消状态。具体什么作用不详。。。有待研究。