自定义nsoperation的用法
#import <Foundation/Foundation.h> typedef void (^DownloadCompletionBlock)(UIImage *image); @interface DownloadOperation : NSOperation
// 图片的url地址
@property (nonatomic, copy) NSString *url;
// retain对block没有作用,只能用copy
@property (nonatomic, copy) DownloadCompletionBlock downloadCompletionBlock;
@end ============================ #import "DownloadOperation.h" @implementation DownloadOperation #pragma mark 在这里添加想要执行的操作
- (void)main {
// main方法可能在异步线程调用,这样就不恩能够访问主线程的自动释放池
// 因此,在这里新建一个属于当前线程的自动释放池
@autoreleasepool {
// 取消操作发生在任何时刻都有可能,因此在执行任何操作之前,先检测该操作是否已经被取消
if (self.isCancelled) {
return;
} NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.url]];
// 执行了比较耗时的操作后也需要检测该操作是否已经被取消
if (self.isCancelled) {
return;
} // 调用Block,传递图片出去
if (_downloadCompletionBlock) {
UIImage *image = [UIImage imageWithData:data]; dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue, ^{
_downloadCompletionBlock(image);
});
}
}
} - (void)dealloc {
[_url release];
[_downloadCompletionBlock release];
[super dealloc];
}
@end
#import "DownloadOperation.h" @implementation DownloadOperation #pragma mark 在这里添加想要执行的操作
- (void)main {
// main方法可能在异步线程调用,这样就不恩能够访问主线程的自动释放池
// 因此,在这里新建一个属于当前线程的自动释放池
@autoreleasepool {
// 取消操作发生在任何时刻都有可能,因此在执行任何操作之前,先检测该操作是否已经被取消
if (self.isCancelled) {
return;
} NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.url]];
// 执行了比较耗时的操作后也需要检测该操作是否已经被取消
if (self.isCancelled) {
return;
} // 调用Block,传递图片出去
if (_downloadCompletionBlock) {
UIImage *image = [UIImage imageWithData:data]; dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue, ^{
_downloadCompletionBlock(image);
});
}
}
} - (void)dealloc {
[_url release];
[_downloadCompletionBlock release];
[super dealloc];
}
@end
========================================= #import "DownloadOperation.h" @implementation DownloadOperation #pragma mark 在这里添加想要执行的操作
- (void)main {
// main方法可能在异步线程调用,这样就不恩能够访问主线程的自动释放池
// 因此,在这里新建一个属于当前线程的自动释放池
@autoreleasepool {
// 取消操作发生在任何时刻都有可能,因此在执行任何操作之前,先检测该操作是否已经被取消
if (self.isCancelled) {
return;
} NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.url]];
// 执行了比较耗时的操作后也需要检测该操作是否已经被取消
if (self.isCancelled) {
return;
} // 调用Block,传递图片出去
if (_downloadCompletionBlock) {
UIImage *image = [UIImage imageWithData:data]; dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue, ^{
_downloadCompletionBlock(image);
});
}
}
} - (void)dealloc {
[_url release];
[_downloadCompletionBlock release];
[super dealloc];
}
@end
#import "DownloadOperation.h" @implementation DownloadOperation #pragma mark 在这里添加想要执行的操作
- (void)main {
// main方法可能在异步线程调用,这样就不恩能够访问主线程的自动释放池
// 因此,在这里新建一个属于当前线程的自动释放池
@autoreleasepool {
// 取消操作发生在任何时刻都有可能,因此在执行任何操作之前,先检测该操作是否已经被取消
if (self.isCancelled) {
return;
} NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.url]];
// 执行了比较耗时的操作后也需要检测该操作是否已经被取消
if (self.isCancelled) {
return;
} // 调用Block,传递图片出去
if (_downloadCompletionBlock) {
UIImage *image = [UIImage imageWithData:data]; dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue, ^{
_downloadCompletionBlock(image);
});
}
}
} - (void)dealloc {
[_url release];
[_downloadCompletionBlock release];
[super dealloc];
}
@end
========================================= #import "DownloadOperation.h" @implementation DownloadOperation #pragma mark 在这里添加想要执行的操作
- (void)main {
// main方法可能在异步线程调用,这样就不恩能够访问主线程的自动释放池
// 因此,在这里新建一个属于当前线程的自动释放池
@autoreleasepool {
// 取消操作发生在任何时刻都有可能,因此在执行任何操作之前,先检测该操作是否已经被取消
if (self.isCancelled) {
return;
} NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.url]];
// 执行了比较耗时的操作后也需要检测该操作是否已经被取消
if (self.isCancelled) {
return;
} // 调用Block,传递图片出去
if (_downloadCompletionBlock) {
UIImage *image = [UIImage imageWithData:data]; dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue, ^{
_downloadCompletionBlock(image);
});
}
}
} - (void)dealloc {
[_url release];
[_downloadCompletionBlock release];
[super dealloc];
}
@end
自定义nsoperation的用法的更多相关文章
- iOS多线程之9.自定义NSOperation
本文主要讲如何自定义NSOperation,以及自定义NSOperation的一些注意事项,以下载图片为例. 新建一个类,继承于NSOperation. CustomOperation.h 代码 ...
- iOS开发多线程篇—自定义NSOperation
iOS开发多线程篇—自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UI ...
- iOS开发——多线程OC篇&(十一)多线程NSOperation高级用法
自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewC ...
- 自定义NSOperation
一直在思考,每次异步请求都会创建一个新线程,如果我同时发100个异步请求,这样会导致我的内存爆满,应用程序奔溃,因为iOS对开线程有着约束,不能开很多个线程,这就要求我们必须对异步请求进行控制,我一直 ...
- Vue.js自定义指令的用法与实例
市面上大多数关于Vue.js自定义指令的文章都在讲语法,很少讲实际的应用场景和用例,以致于即便明白了怎么写,也不知道怎么用.本文不讲语法,就讲自定义指令的用法. 自定义指令是用来操作DOM的.尽管Vu ...
- Objective-c 多线程操作 自定义NSOperation 模拟下载
写在前面 使用多线程下载图片,使用内存缓存和磁盘缓存. 这里只为理解NSOperation及其派生类 真要应用到APP中 请下载成熟的第三方库 效果 下载多张图片时可控制线程并发数 分析 自定义NSO ...
- 自定义NSOperation下载图片
自定义NSOperation的话,只是需要将要下载图片的操作下载它的main方法里面,考虑到,图片下载完毕,需要回传到控制器里,这里可以采用block,也可以采用代理的方式实现,我采用的是代理的方式实 ...
- iOS多线程编程之自定义NSOperation(转载)
一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewController. 1 // ...
- iOS开发多线程篇 11 —自定义NSOperation
iOS开发多线程篇—自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UI ...
随机推荐
- 1、Python简史
Python简史 什么是Python 一种解释型的.面向对象的.带有动态语义的高级程序设计语言 Python编程 是一种使你在编程时能够保持自己风格的程序设计语言,你不用费什么劲就可以实现你想要的功能 ...
- GIST特征描述符使用
来源:http://www.cnblogs.com/justany/archive/2012/12/06/2804211.html 一种场景特征描述 场景特征描述? 通常的特征描述符都是对图片的局部特 ...
- php随机生成汉字实现方法
GB 2312-80 是中国国家标准简体中文字符集,全称<信息交换用汉字编码字符集·基本集>,由中国国家标准总局发布,1981年5月1日实施.GB2312 编码通行于中国大陆:新加坡等地也 ...
- 【Python】无须numpy,利用map函数与zip(*)函数对数组转置(转)
http://blog.csdn.net/yongh701/article/details/50283689 在Python的numpy中,对类似array=[[1,2,3],[4,5,6],[7,8 ...
- THINKPHP 解决模块不存在时出现空页面的问题
遇到的问题: 最近使用THINKCMF开发了一个企业网站,因为之前客户的域名变更过,然后就发现当某个模块不存在的时候就出现了空页面 在 THINKPHP论坛 上有人说在项目里添加一个EmptyActi ...
- Mongoose vs mongodb native driver – what to prefer?
Paul Shan 7th Jun 2015 Mongoose or mongodb native driver, which one to use? This is one of the ini ...
- Jquery Ajax 返回数据类型变成document
下面是我写的一段Jquery Ajax的代码,在chrome下没有问题,在firefox下就算是返回success也提示"系统正忙"; $.ajax({ url: "fa ...
- (算法)Binary Tree Max Path Sum
题目: Given a binary tree, find the maximum path sum. For this problem, a path is defined as any seque ...
- 循环插入oracle 存储过程
-- Create tablecreate table STUDENTS( name VARCHAR2(300), id NUMBER(11), city VARCHAR2(300), no VARC ...
- SWIFT学习笔记05
1.Swift 无需写break,所以不会发生这样的贯穿(fallthrough)的情况.2.//用不到变量名,可用"_"替换 for _ in 1...power { answe ...