文档章节

Objective-C-NSOperation自定义实现

BKF_
 BKF_
发布于 2016/03/03 15:02
字数 193
阅读 43
收藏 0
点赞 1
评论 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

关于iOS多线程

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

法斗斗 ⋅ 2016/03/10 ⋅ 0

【iOS】多线程NSOperation

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

xn4545945 ⋅ 2014/07/28 ⋅ 0

iOS OS X 和 iOS 中的多线程技术-1

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

石虎132 ⋅ 2017/11/21 ⋅ 0

iOS面试题总结(三)

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

沧州宁少 ⋅ 2017/12/06 ⋅ 0

Objective-C-NSOperation

NSOpseration是抽象基类,所以要用子类实现它的方法。(内部使用gcd实现) 1.一个NSOperation 就代表一个任务,任务的代码分装在block里或者函数里。 OC提供子类: NSInvocztionOperation:任...

BKF_ ⋅ 2016/03/03 ⋅ 0

iOS技术面试题

收集了一些iOS技术面试题,试试你能通过吗? iOS知识问题: Difference between shallow copy and deep copy? What is advantage of categories? What is difference between implementing ......

长平狐 ⋅ 2012/08/13 ⋅ 0

多线程NSOperation一般使用

一、NSOperation简介 简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤: (1)先将需要执行的操...

朝雨晚风 ⋅ 2016/08/22 ⋅ 0

多线程 NSThread,NSOperation,GCD

iOS中的线程 iOS主线程(UI线程),我们的大部分业务逻辑代码运行于主线程中。 没有特殊需求,不应引入线程增加程序复杂度。 应用场景:逻辑执行时间过长,严重影响交互体验(界面卡死)等。 iOS多线...

HelloSwift ⋅ 2016/08/08 ⋅ 0

Objective-C 后台线程 和 NSOperationQueue

后台线程 简单操作,无需创建线程时,可以使用一下函数(以UILabel 为例): [myLabel performSelector:@selector(setText:) withObject:@"hello" afterDelay:0.1f]; 代替平时的操作:[myLabe...

木木情深 ⋅ 2014/02/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

645. Set Mismatch - LeetCode

Question 645. Set Mismatch Solution 思路: 遍历每个数字,然后将其应该出现的位置上的数字变为其相反数,这样如果我们再变为其相反数之前已经成负数了,说明该数字是重复数,将其将入结果r...

yysue ⋅ 22分钟前 ⋅ 0

Confluence 6 从生产环境中恢复一个测试实例

请参考 Restoring a Test Instance from Production 页面中的内容获得更多完整的说明。 很多 Confluence 的管理员将会使用生产实例运行完整数据和服务的 Confluence 服务器,同时还会设置一个...

honeymose ⋅ 27分钟前 ⋅ 0

Python这么强?红包杀手、消息撤回也可以无视,手机App辅助!

论述 标题也许有点不好理解,其实就是一款利用Python实现的可以监控微信APP内的红包与消息撤回的助手。不得不说,这确实是一款大家钟意的神器。 消息撤回是一件很让人恶心的事,毕竟人都是有...

Python燕大侠 ⋅ 38分钟前 ⋅ 0

压缩打包介绍、gzip压缩工具、bzip2压缩工具、xz压缩工具

压缩打包介绍 压缩的好处不仅能节省磁盘空间而且在传输的时候节省传输时间和网络带宽 windows系统下文件带有 .rar .zip .7z 后缀的就是压缩文件 linux系统下则是 .zip, .gz, .bz2, .xz, ...

黄昏残影 ⋅ 43分钟前 ⋅ 0

观察者模式

1.利用java原生类进行操作 package observer;import java.util.Observable;import java.util.Observer;/** * @author shadow * @Date 2016年8月12日下午7:29:31 * @Fun 观察目标 **/......

Cobbage ⋅ 46分钟前 ⋅ 0

Ubuntu打印服务器配置

参考:https://blog.csdn.net/gsls200808/article/details/50950586 https://blog.csdn.net/jiay2/article/details/80252369 https://wiki.gentoo.org/wiki/HPLIP 由于媳妇儿要大量打印资料,......

大熊猫 ⋅ 51分钟前 ⋅ 0

面试的角度诠释Java工程师(二)

原文出处: locality 续言: 相信每一位简书的作者,都会有我这样的思考:怎么写好一篇文章?或者怎么写好一篇技术类的文章?我就先说说我的感悟吧,写文章其实和写程序是一样的。为什么我会...

颖伙虫 ⋅ 54分钟前 ⋅ 0

github中SSH的Key

https://help.github.com/articles/connecting-to-github-with-ssh/ https://help.github.com/articles/testing-your-ssh-connection/ https://help.github.com/articles/adding-a-new-ssh-k......

whoisliang ⋅ 55分钟前 ⋅ 0

only_full_group_by

我的mysql是在CentOS7.1下面的5.7.17 在 /etc/my.cnf 文件里加上如下: sql_mode='NO_ENGINE_SUBSTITUTION' 然后,重启Mysql服务 systemctl restart mysqld...

SunHacker ⋅ 今天 ⋅ 0

实际项目(SpringBoot项目)中集成Druid

参考网页 https://blog.csdn.net/liuchuanhong1/article/details/55050131 https://blog.csdn.net/CoffeeAndIce/article/details/78707819 https://www.pocketdigi.com/20170530/1577.html 为......

karma123 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部