美文网首页
iOS 多线程初探 (二)

iOS 多线程初探 (二)

作者: maskerII | 来源:发表于2020-10-29 15:32 被阅读0次

四、iOS 中的多线程

主要有三种:NSThread、NSoperationQueue、GCD

  1. NSThread:轻量级别的多线程技术
    是我们自己手动开辟的子线程,如果使用的是初始化方式就需要我们自己启动,如果使用的是构造器方式 它就会自动启动。只要是我们手动开辟的线程,都需要我们自己管理该线程,不只是启动,还有该线程使 用完毕后的资源回收
- (void)threadTest1 {
    
    // 使用初始化方式开辟子线程
    NSThread * thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(threadTestAction1:) object:@"我是参数1"];
    // 使用初始化方法开辟出来的NSThread线程,需要start启动
    [thread1 start];
    // 为开辟的子线程命名
    thread1.name = @"thread Test 1";
    // 调整thread的权限,线程权限范围值为0~1,权限值越大权限越高,先执行的概率就越高,由于是概率,所以并不能很准确的实现我们想要的执行顺序
    thread1.threadPriority = 1;
//    // 取消当前已经启动的线程
//    [thread1 cancel];
    
    NSThread *thread2 = [[NSThread alloc] initWithBlock:^{
        [self threadTestAction1:@"我是参数2"];
    }];
    thread2.threadPriority = 0.1;
    [thread2 start];
    
    // 使用构造器方式开辟子线程
    [NSThread detachNewThreadSelector:@selector(threadTestAction1:) toTarget:self withObject:@"我是参数3"];
    
    [NSThread detachNewThreadWithBlock:^{
        [self threadTestAction1:@"我是参数4"];
    }];
    
}

- (void)threadTestAction1:(NSString *)paramString {
    NSLog(@"threadTestAction1 参数%@ thread %@",paramString,[NSThread currentThread]);
}

performSelector...只要是 NSObject 的子类或者对象都可以通过调用方法进入子线程和主线程,其实这些 方法所开辟的子线程也是 NSThread 的另一种体现方式。
在编译阶段并不会去检查方法是否有效存在,如果不存在只会给出警告

相关文章

网友评论

      本文标题:iOS 多线程初探 (二)

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