设为主页 | 加入收藏 | 繁體中文

进程与线程

  主线程内里执行耗时操作会导致界面阻塞,所以一般把耗时操作放到子线程执行,例如网络恳求、线程睡眠、加载文件、大量运算。
  1、不要把耗时操作放到主线程。
  2、不要把修改页面的代码放到子线程(子线程修改页面不会比及实时更新)
  第一种开启子线程的要领
  NSThread
  //开启一个子线程
  [NSThread detachNewThreadSelector:@selector(createMouse) toTarget:selfwithObject:nil];
  //返回主线程
  [self performSelectorOnMainThread:@selector(updateUI:) withObject:self.mouse waitUntilDone:NO];
  第二种开启子线程的要领
  **
  Grand Central Dispatch (**)是Apple开发的一个多核编程的解决要领,自己创建的线程队列为串行队列,获取体系提供的线程队列为并行队列。
  //开启一个子线程
  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.imagaPaths[indexPath.row]]];
  UIImage *image = [UIImage imageWithData:data];
  //返回主线程
  dispatch_async(dispatch_get_main_queue(), ^{
  cell.imageView.image = image;
  [cell setNeedsLayout];
  });
  });
  第三种开启子线程的要领
  NSOperation
  创建出来的线程队列默许为并行队列。
  - (void)viewDidLoad
  {
  [super viewDidLoad];
  //方法一 开启一个线程
  NSOperation *op1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(newThreadAction) object:nil];
  //方法二 开启一个线程
  NSOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
  for (int i=0; i<5; i++) {
  [NSThread sleepForTimeInterval:.5];
  NSLog(@"线程2--%d",i);
  }
  }];
  //创建线程队列,默许创建出来的线程队列为并行队列
  NSOperationQueue *myQueue = [[NSOperationQueue alloc]init];
  //设置最大同时执行的线程数量
  [myQueue setMaxConcurrentOperationCount:1];
  //给op1添加一个依赖 依赖op2
  [op1 addDependency:op2];
  //将线程添加到队列,线程添加到队列后才会执行
  [myQueue addOperation:op1];
  [myQueue addOperation:op2];
  }
  - (void)newThreadAction{
  for (int i=0; i<5; i++) {
  [NSThread sleepForTimeInterval:.5];
  NSLog(@"线程1--%d",i);
  }
  }
  **与NSOperation的区别
  1、**,代码更简洁,使用越发方便,**越发高效,由于属于C言语的语法,更底层。
  2、NSOperation,机动控制线程之间的关系,可以设置同时执行的线程数量。
  //设置最大同时执行的线程数量,如果设置为1,则相称于线程串行执行
  [myQueue setMaxConcurrentOperationCount:1];
  //给op1添加一个依赖 依赖op2,先执行op2,再执行op1
  [op1 addDependency:op2]; 
 


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: