iOS多线程-创建线程

复习下线程的基础知识, 这里主要是参考文顶顶多线程篇写的。

一、创建和启动线程简单说明

一个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

你可能感兴趣的:(iOS多线程-创建线程)