[iOS开发]RAC实现图片下载功能

RAC实现图片下载功能

在实现异步RAC下载图片的过程中,需要注意以下几点:

  •  通过 NSURLConnection 对象的 +(RACSignal *)rac_sendAsynchronousRequest:(NSURLRequest*)r 可以创建网络异步下载的信号量对象;

  •  在执行完成异步下载过程后,需要通过 [x deliverOn:[RACScheduler mainThreadScheduler]] 操作将方法返回到主线程进行执行;

@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

 

你可能感兴趣的:([iOS开发]RAC实现图片下载功能)