线程间通信

1.performSelector

- (void)perform {
  NSString *urlString =
      @"http://pic13.nipic.com/20110415/1347158_132411659346_2.jpg";
  //下载操作放到后台执行
  [self performSelectorInBackground:@selector(loadImage:) withObject:urlString];
}

- (void)loadImage:(NSString *)urlString {
  NSURL *url = [NSURL URLWithString:urlString];
  NSData *data = [NSData dataWithContentsOfURL:url];
  UIImage *image = [UIImage imageWithData:data];
  //下载完毕,回到主线程刷新 UI
  [self performSelectorOnMainThread:@selector(updataUI:)
                         withObject:image
                      waitUntilDone:YES];
  //是否等待执行完毕
  NSLog(@"loadOVer---%@", [NSThread currentThread]);
}

- (void)updataUI:(UIImage *)image {
  self.iconView.image = image;
}

2.GCD

- (void)gcd {
  NSString *urlString =
      @"http://pic13.nipic.com/20110415/1347158_132411659346_2.jpg";

  __weak typeof(self) weakSelf = self;

  dispatch_async(dispatch_get_global_queue(0, 0), ^{
    NSURL *url = [NSURL URLWithString:urlString];
    NSData *data = [NSData dataWithContentsOfURL:url];
    UIImage *image = [UIImage imageWithData:data];

    //回到主线程刷新 UI
    dispatch_async(dispatch_get_main_queue(), ^{
      weakSelf.iconView.image = image;

    });

  });
}

3.NSOperation

- (void)operation {
  NSString *urlString =
      @"http://pic13.nipic.com/20110415/1347158_132411659346_2.jpg";
  NSOperationQueue *queue = [[NSOperationQueue alloc] init];
  __weak typeof(self) weakSelf = self;
  [queue addOperationWithBlock:^{
    NSLog(@"%@", [NSThread currentThread]);
    NSURL *url = [NSURL URLWithString:urlString];
    NSData *data = [NSData dataWithContentsOfURL:url];
    UIImage *image = [UIImage imageWithData:data];
    //回到主线程刷新 UI
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        NSLog(@"%@", [NSThread currentThread]);
      weakSelf.iconView.image = image;
    }];
  }];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值