在实现异步RAC下载图片的过程当中,须要注意如下几点:网络
• 经过 NSURLConnection 对象的 +(RACSignal *)rac_sendAsynchronousRequest:(NSURLRequest*)r 能够建立网络异步下载的信号量对象;异步
• 在执行完成异步下载过程后,须要经过 [x deliverOn:[RACScheduler mainThreadScheduler]] 操做将方法返回到主线程进行执行;url
@implementation ViewController { RACCommand *loginCommand; RACSignal *loginSignal; } - (void)awakeFromNib { //建立网络图片下载的URL对象 NSURL *url = [NSURL URLWithString:@"http://pica.nipic.com/2007-11-09/2007119124513598_2.jpg"]; //建立网络图片请求对象 NSURLRequest *request = [NSURLRequest requestWithURL:url]; //实例化命令操做对象 loginCommand = [[RACCommand alloc] initWithSignalBlock:^(id sender) { //经过NSURLConnection的+方法,建立异步返回信号量 return [NSURLConnection rac_sendAsynchronousRequest:request]; }]; //信号量完成后的插座操做 [loginCommand.executionSignals subscribeNext:^(RACSignal *x) { //将下载完成的图片数据转换成图片对象后,在主线程赋值给imageView属性 [[x deliverOn:[RACScheduler mainThreadScheduler]] subscribeNext:^(RACTuple *tuple) { NSData *imageData = tuple.last; //imageView - UIImageView self.imageView.image = [UIImage imageWithData:imageData]; }]; }]; } - (void)viewDidLoad { [super viewDidLoad]; //指定触发命令操做 //btn - UIButton self.btn.rac_command = loginCommand; } @end