NSThread创建及简单使用

创建方法

    //方法一
    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]);
    
}

你可能感兴趣的:(NSThread创建及简单使用)