[多线程之二]-NSOperation练习

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIImageView *MainImgView;
@property (strong, nonatomic) IBOutlet UIImageView *BlockImgView;
@end
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    NSURL* url = [[NSURL alloc] initWithString:@"http://avatar.csdn.net/3/0/F/1_liyanq528.jpg"];
    //注意1:NSInvocationOperation这个只能传一个参数
    //注意2:NSInvocationOperation直接调用的话,是放在主线程调用,只有用queue里面才是其他线程调用。
    NSInvocationOperation* operat = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downLoadImg:) object:url];
    [operat setCompletionBlock:^{
        NSLog(@"MainImgView图像更新完成");
    }];
    //注意3:NSBlockOperation直接调用只有一个block,是放在主线程调用。有多个block,或者放入queue里面,就可以其他线程调用
    NSBlockOperation* bOperat = [NSBlockOperation blockOperationWithBlock:^{
        NSData* data = [[NSData alloc] initWithContentsOfURL:url];
        if (data) {
            UIImage* img = [[UIImage alloc] initWithData:data];
            NSLog(@"%@",[NSThread currentThread]);
            dispatch_async(dispatch_get_main_queue(), ^{
                self.BlockImgView.image = img;
            });
            //[self performSelectorOnMainThread:@selector(updateImg:) withObject:img waitUntilDone:NO];
        }
    }];
    [bOperat setCompletionBlock:^{
        NSLog(@"BlockImgView图像更新完成");
    }];
    NSOperationQueue* que = [[NSOperationQueue alloc]init];
    //注意4:并发的线程数量不宜过多,最好5以内,否则会影响ui
    [que setMaxConcurrentOperationCount:3];
    [que addOperation:operat];
    [que addOperation:bOperat];
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
-(void) updateImg:(UIImage*) aimg
{
    self.MainImgView.image = aimg;
}
-(void) downLoadImg:(NSURL*) aurl
{
    NSData* data = [[NSData alloc] initWithContentsOfURL:aurl];
    if (data) {
        UIImage* img = [[UIImage alloc] initWithData:data];
        dispatch_async(dispatch_get_main_queue(), ^{
            self.MainImgView.image = img;
        });
        //[self performSelectorOnMainThread:@selector(updateImg:) withObject:img waitUntilDone:NO];
    }
}
@end
参考:http://www.cnblogs.com/wendingding/p/3809042.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值