美文网首页
NSThread创建线程的方式

NSThread创建线程的方式

作者: Howeix | 来源:发表于2019-08-21 23:13 被阅读0次

    NSThread通常来说, 有以下3种创建子线程的方式:

    1.通过[[NSThread alloc] init]可以实例化一个线程对象(也就是直接可以通过此方式创建并获取一个子线程对象):

    通过初始化创建子线程对象,将要在子线程中执行的任务放在block中传入:

    NSThread *thread = [[NSThread alloc] initWithBlock:^{
          for (int i = 0 ; i < 10000; i++) {
                NSLog(@"%d---%@",i,[NSThread currentThread]);
          }
    }];
    [thread start]; //调用start方法才能执行线程的任务
    
    //通过传入sel方法及和对象初始化子线程对象,子线程中执行当前类的run:方法传入字符串@"jack".:
    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@"jack"];
    [thread start];
    thread.name = @"jack_thread";
    
    
    2.通过NSThread的detachNewThread类方法在子线程中执行任务,但是无法获取或者操作此线程, 如果仅仅是要开辟子线程执行相关任务,并无需设置子线程相关属性或者名称可以使用此方法:
    [NSThread detachNewThreadWithBlock:^{
            NSLog(@"%@",[NSThread currentThread]);
     }];
    [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"jack"];    //子线程中执行当前类的run:方法传入字符串@"jack".
    
    
    3.系统有一个基于NSObject的分类: NSThreadPerformAdditions, 在此分类中有个对NSObject类的扩展实例方法:
    - (void)performSelectorInBackground:(SEL)aSelector withObject:(nullable id)arg API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
    
    

    我们可以在需要创建子线程的地方, 例如控制器调用:

    //在子线程中执行当前类的run:方法传入参数@"jack"
    [self performSelectorInBackground:@selector(run:) withObject:@"jack"];
    
    

    相关文章

      网友评论

          本文标题:NSThread创建线程的方式

          本文链接:https://www.haomeiwen.com/subject/fkbwsctx.html