文档章节

Objective-C-NSOperation自定义实现

BKF_
 BKF_
发布于 2016/03/03 15:02
字数 193
阅读 47
收藏 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】多线程NSOperation

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

xn4545945
2014/07/28
0
0
关于iOS多线程

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

法斗斗
2016/03/10
15
0
iOS OS X 和 iOS 中的多线程技术-1

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

石虎132
2017/11/21
0
0
Objective-C-NSOperation

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

BKF_
2016/03/03
2
0

没有更多内容

加载失败,请刷新页面

加载更多

Hanlp实战HMM-Viterbi角色标注中国人名识别

这几天写完了人名识别模块,与分词放到一起形成了两层隐马模型。虽然在算法或模型上没有什么新意,但是胜在训练语料比较新,对质量把关比较严,实测效果很满意。比如这句真实的新闻“签约仪式...

左手的倒影
6分钟前
0
0
页面平滑滚动的体验提升

scroll-behavior属性和JS scrollIntoView()方法 本身作为体验提升的手段,用 <a href="#" rel="internal">返回顶部</a> 兼容性就可以不用考虑太多 不支持就直接回去呗 用法: scroll-behavio...

红羊在厦门
7分钟前
0
0
Spring IOC 之 加载 Bean

这段代码是 Spring 中编程式使用 IOC 容器,通过这四段简单的代码,我们可以初步判断 IOC 容器的使用过程 获取资源 获取 BeanFactory 根据新建的 BeanFactory 创建一个BeanDefinitionReader对...

职业搬砖20年
10分钟前
0
0
Spring Cloud Eureka 常用配置及说明

配置参数 默认值 说明 服务注册中心配置 Bean类:org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean eureka.server.enable-self-preservation false 关闭注册中心的保......

君千殇520
12分钟前
0
0
如何通过Kibana,Wazuh和Bro IDS提高中小企业的威胁检测能力?

前言 近来,我们一直都在通过一些开源免费的工具,来帮助中小企业提升其网络威胁检测能力。在本文中,我们将手把手的教大家通过Kibana,Wazuh和Bro IDS来提高自身企业的威胁检测能力。 什么是...

刀剑如梦
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部