美文网首页
问题:Object C中创建线程的方法是什么?如果在主线程中执行

问题:Object C中创建线程的方法是什么?如果在主线程中执行

作者: 姜小舟 | 来源:发表于2020-05-18 14:27 被阅读0次

线程创建有三种方法:

  • 使用NSThread创建。
NSThread *oneThread=[[NSThread alloc]initWithTarget:self selector:@selector(sayMethod) object:nil];
[oneThread start];
#还可以是 
[self performSelectorInBackground:@selector(sayMethod) withObject:nil];
#也可以是
[NSThread detachNewThreadSelector:@selector(sayMethod) toTarget:self withObject:nil];
  • 使用GCD的dispatch。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [NSThread sleepForTimeInterval:3];
    NSString *str=@"nice to meet you";
    NSLog(@"%@",str);
    dispatch_async(dispatch_get_main_queue(), ^{
        UILabel *onelabel=[[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
        [self.view addSubview:onelabel];
        onelabel.text=str;
    });
});
  • 使用子类化的NSOperation(或用它定义好的两个子类:NSInvocationOperation 和 NSBlockOperation),然后将其加入NSOperationQueue。
#模仿下载网络图像
- (IBAction)operationDemo3:(id)sender {
   // 1\. 下载
  NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
      NSLog(@"下载 %@" , [NSThread currentThread]);
  }];
  // 2\. 滤镜
  NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
       NSLog(@"滤镜 %@" , [NSThread currentThread]);
    }]; 
   // 3\. 显示
   NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
       NSLog(@"更新UI %@" , [NSThread currentThread]); 
   }]; 
   // 添加操作之间的依赖关系,所谓“依赖”关系,就是等待前一个任务完成后,后一个任务才能启动   
   // 依赖关系可以跨线程队列实现 
   // 提示:在指定依赖关系时,注意不要循环依赖,否则不工作。
   [op2 addDependency:op1]; 
   [op3 addDependency:op2]; 
//    [op1 addDependency:op3];

   [_queue addOperation:op1]; 
   [_queue addOperation:op2]; 
   [[NSOperationQueue mainQueue] addOperation:op3]; 
}

在主线程执行代码,方法是performSelectorOnMainThread

[self performSelectorOnMainThread:@selector(refreshTableView) withObject:nil waitUntilDone:YES];

如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone

[self performSelector:@selector(test:) onThread:thread withObject:nil waitUntilDone:NO];

相关文章

  • 6.Object C中创建线程的方法是什么?如果在主线程中执行代

    Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么? 线...

  • 多线程

    Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么? 1...

  • iOS 面试题汇总(二)

    13. Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什...

  • iOS面试题(三)

    1、Objective-C 中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又...

  • 问题:Object C中创建线程的方法是什么?如果在主线程中执行

    线程创建有三种方法: 使用NSThread创建。 使用GCD的dispatch。 使用子类化的NSOperatio...

  • iOS高级开发面试题精选总结

    1、OC中创建线程的方法是什么?如果指定在主线程中执行代码?如何延时执行代码。【难度系数★★】 1)创建线程的方法...

  • 多线程

    OC中创建线程的方法如果指定在主线程中执行代码,如何延时执行代码 1.创建线程的方法NSThreadNSOpera...

  • iOS初级

    1.OC中创建线程的方法是什么?制定在主线程中执行代码?如何延时执行代码? 1)有三种: NSThread; NS...

  • 关于线程安全问题

    一、 通过线程池创建A,B,C三个子线程,并设置A子线程执行1秒;B子线程执行3秒; C子线程执行7秒。要求:①主...

  • GCD延时

    在主线程中延迟执行某动作,不会卡主主线程,不影响后面的东做执行 在子线程中执行某动作,不会卡主整个线程

网友评论

      本文标题:问题:Object C中创建线程的方法是什么?如果在主线程中执行

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