多线程编程

#pragma mark - 下载图像方法一:使用NSOperationQueue

- (void)downLoadImageUserOperationQueue
{
    NSString *url = kIMAGEURL;
    NSInvocationOperation *operator = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector  (downLoadImage:) object:url];                                             //申请一个新的线程
    NSOperationQueue *queue = [[NSOperationQueue alloc]init];                    //申请一个队列
    [queue addOperation:operator];                                                 //在队列中加入线程
    

}

- (void)downLoadImage:(NSString *)urlPath
{
    NSURL  *url = [NSURL URLWithString:urlPath];
    NSData *data = [[NSData alloc]initWithContentsOfURL:url];
    
    UIImage *image = [UIImage imageWithData:data];
    [self performSelectorOnMainThread:@selector(updateUI:) withObject:image waitUntilDone:YES];    //performSelectorOnMainThread: 进入主线程,再调用主线程里的方法,因为要改变界面,必须回到主线程
    
    
    
}

- (void)updateUI:(UIImage *)image       //更新图片
{
    self.myImageView.image = image;
}

#pragma mark - 下载图像方法二:使用GCD

- (void)downLoadImageUserGCD
{
    [self.myActivityView startAnimating];
    
    self.myActivityView.hidesWhenStopped = YES;
    //一步多线程编程
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{    //dispatch_get_global_queue自动生成一个全局队列,DISPATCH_QUEUE_PRIORITY_DEFAULT默认一个线程
        NSURL *url = [NSURL URLWithString:kIMAGEURL];
        NSData *data =[[NSData alloc]initWithContentsOfURL:url];
        
        UIImage * image = [UIImage imageWithData:data];
        
        if(data != nil)
        {
           dispatch_async(dispatch_get_main_queue(), ^{    //dispatch_get_main_queue() (C语言方法)获得当前主线程
               self.myImageView.image = image;
               [self.myActivityView stopAnimating];
           });
        }
        
    });

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值