文档章节

Objective-C-NSOperation自定义实现

BKF_
 BKF_
发布于 2016/03/03 15:02
字数 193
阅读 45
收藏 0

自定义 NSOperation要实现main方法,内部代码加上 autoRelease


DownloadImg.h

@class UIImage;
@class DownLoadOperation;

@protocol DownLoadOperationDelegate <NSObject>
@required
- (void) downloadOperation:(DownLoadOperation*) opertaion finishDownloadImg:(UIImage *)img;
@end

@interface DownLoadOperation : NSOperation
/** 要传递到operation中的属性*/
@property (nonatomic, strong) NSString *urlStr;
/** 用来通知下载图片生成KO*/
@property (nonatomic, weak) id<DownLoadOperationDelegate> delegate;
@end

DownloadImg.m

#import <UIKit/UIKit.h>

@implementation DownLoadOperation

- (void) main
{
    @autoreleasepool {
        if (self.isCancelled) {
            return;
        }
        NSURL *url = [NSURL URLWithString:self.urlStr];
        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *img = [UIImage imageWithData:data];
        
        if (self.isCancelled) {
            return;
        }
        //update UI
        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
            if ([self.delegate respondsToSelector:@selector(downloadOperation:finishDownloadImg:)]) {
                [_delegate downloadOperation:self finishDownloadImg:img];
            }
        }];
    }
}
@end

ViewController

#import "DownLoadOperation.h"

@interface ViewController ()<DownLoadOperationDelegate>

@property (weak, nonatomic) IBOutlet UIImageView *imgView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    if (_imgView.image) {
        return;
    }
    DownLoadOperation *operation = [[DownLoadOperation alloc] init];
    operation.urlStr = @"http://img4.duitang.com/uploads/item/201406/01/20140601231235_WRKGW.jpeg";
    operation.delegate = self;
    
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [queue addOperation:operation];
}

- (void)downloadOperation:(DownLoadOperation *)opertaion finishDownloadImg:(UIImage *)img
{
    _imgView.image = img;
}
@end


© 著作权归作者所有

共有 人打赏支持
BKF_
粉丝 1
博文 21
码字总数 4291
作品 0
广州
iOS GCD~performSelector、dispatch_once、NSOperation总结

//联系人:石虎QQ:1224614774昵称:嗡嘛呢叭咪哄 一、使用GCD 替代 performSelector 系列方法 NSObject 的 performSelector 系列方法有很多限制。传给要执行的方法的参数的数量是有限制的,也没...

石虎132
2017/12/05
0
0
关于iOS多线程

关于iOS多线程 原文地址:http://www.jianshu.com/p/0b0d9b1f1f19 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案例,在实...

法斗斗
2016/03/10
15
0
【iOS】多线程NSOperation

NSOperation是苹果封装的一套多线程的东西,不像GCD是纯C语言的,这个是OC的。但相比较之下GCD会更快一些,但本质上NSOPeration是多GDC的封装。 一、NSOperation与GCD的比较 GCD是基于c的底层...

xn4545945
2014/07/28
0
0
iOS面试题总结(三)

iOS面试(三) 1.MVC具有什么样的优势,各个模块之间怎么通信,比如Button后怎么通知Model MVC是一种设计思想,是一种架构模式,是一种把应用所有类组织起来的策略。他们把程序分成3块。 M: 存储...

沧州宁少
2017/12/06
0
0
iOS OS X 和 iOS 中的多线程技术-1

//联系人:石虎QQ:1224614774昵称:嗡嘛呢叭咪哄 一、概念 多线程的目的是,通过并发执行提高 CPU 的使用效率,进而提供程序运行效率。 OS X 和 iOS 是多线程操作系统,它们追随 UNIX 系统使用...

石虎132
2017/11/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
0
0
spring EL 和资源调用

资源调用 import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.PropertySource;import org.springframework.core.io.Resource;......

Canaan_
今天
0
0
memcached命令行、memcached数据导出和导入

一、memcached命令行 yum装telnet yum install telent 进入memcached telnet 127.0.0.1 11211 命令最后的2表示,两位字节,30表示过期时间(秒) 查看key1 get key1 删除:ctrl+删除键 二、m...

Zhouliang6
今天
0
0
Linux定时备份MySQL数据库

做项目有时候要备份数据库,手动备份太麻烦,所以找了一下定时备份数据库的方法 Linux里有一个 crontab 命令被用来提交和管理用户的需要周期性执行的任务,就像Windows里的定时任务一样,用这...

月夜中徘徊
今天
1
1
shell-日志脚本小实验

1.查找日志2018-8-15,求得那一分钟访问量最大。 #/bin/bash#from cc#2018-8-15#2018-08-15.log 哪一分钟 访问量 最大for d in `ls /data/nginx/logs/`doif [ -a 2018-08-15...

chencheng-linux
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部