创建方法
//方法一
NSThread *thread1 = [[NSThread alloc]initWithTarget:self selector:@selector(threadAction) object:nil];
//启动线程
[thread1 start];
// 注意:object:后面跟的是自定义方法有参数时接受的参数,以下方法都是一样
//方法二 没有返回值,不需要调用start方法
[NSThread detachNewThreadSelector:@selector(threadAction) toTarget:self withObject:nil];
//方法三
[self performSelectorInBackground:@selector(threadAction) withObject:nil];
//方法四 自定义线程
CustomThread *customThread = [[CustomThread alloc]init];
//启动方法调用main方法的话,就相当于调用了一个普通方法,还是在主线程中
// [self main];//这种调用是错误的
//启动线程,新的线程会执行相应线程生成的main方法,并且会开辟一个新的线程
[customThread start];
}
//自定义类.m 文件内容
#import "CustomThread.h"
@implementation CustomThread
- (void)main{
NSLog(@"threadPriority的优先级:%lf",[NSThread threadPriority]);
NSLog(@"threadCallMethod是否是主线程:%d",[[NSThread currentThread] isMainThread]);
}
@end
退出线程
//1线程的推出(只能退出还没有执行的线程)
[NSThread exit];
//指定某个线程退出
//(1)先标记thread1状态是cancel
[self performSelector:@selector(cancelThread1:) withObject:thread1 afterDelay:1];
//给线程绑定状态的方法
- (void)cancelThread1:(NSThread *)thread{
[thread cancel];
}
//线程实现的方法
- (void)threadAction{
//(2)延迟2秒,判断当前线程是否被取消的状态
[NSThread sleepForTimeInterval:2];
if ([[NSThread currentThread]isCancelled]) {
//如果是,退出线程
[NSThread exit];
}
NSLog(@"-----优先级:%lf",[NSThread threadPriority]);
NSLog(@"------是否是主线程:%d",[[NSThread currentThread]isMainThread]);
}
网友评论