复习下线程的基础知识, 这里主要是参考文顶顶多线程篇写的。
一、创建和启动线程简单说明
一个NSThread对象就代表一条线程
1、创建线程
方式一、创建、启动线程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start];// 线程一启动,就会在线程thread中执行self的run方法
方式二、创建线程后自动启动线程
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
方式三、隐式创建并启动线程
[self performSelectorInBackground:@selector(run) withObject:nil];
方式二和方式三创建线程方式的优缺点
优点:简单快捷
缺点:无法对线程进行更详细的设置
2、主线程相关用法
+ (NSThread *)mainThread; // 获得主线程
- (BOOL)isMainThread; // 是否为主线程
+ (BOOL)isMainThread; // 是否为主线程
3、其他用法
获得当前线程
NSThread *current = [NSThread currentThread];
线程的调度优先级:调度优先级的取值范围是0.0 ~ 1.0,默认0.5,值越大,优先级越高
+ (double)threadPriority;
+ (BOOL)setThreadPriority:(double)p;
设置线程的名字
- (void)setName:(NSString *)n;
- (NSString *)name;
二、代码示例
1、pthread
void *run(void *data) {
for (int i = 0; i < 10000; i++) {
NSLog(@"touchesBegan----%d-----%@", i, [NSThread currentThread]);
}
return NULL;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// 创建线程
pthread_t myRestrict;
pthread_create(&myRestrict, NULL, run, NULL);
}
2、NSThread创建线程方式
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self createThread1];
[self createThread2];
[self createThread3];
}
/**
* 创建线程的方式1
*/
- (void)createThread1 {
// 创建线程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(download:) object:@"http://a.png"];
thread.name = @"下载线程";
// 启动线程(调用self的download方法)
[thread start];
}
/**
* 创建线程的方式2
*/
- (void)createThread2 {
[NSThread detachNewThreadSelector:@selector(download:) toTarget:self withObject:@"http://b.jpg"];
}
/**
* 创建线程的方式3
*/
- (void)createThread3 {
//这2个不会创建线程,在当前线程中执行
// [self performSelector:@selector(download:) withObject:@"http://c.gif"];
// [self download:@"http://c.gif"];
[self performSelectorInBackground:@selector(download:) withObject:@"http://c.gif"];
}
- (void)download:(NSString *)url {
NSLog(@"下载东西---%@---%@", url, [NSThread currentThread]);
}
@end
网友评论