自定义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 ...
随机推荐
- TextureView SurfaceView 简介 案例
简介 Android普通窗口的视图绘制机制是一层一层的,任何一个子元素或者是局部的刷新都会导致整个视图结构全部重绘一次,因此效率相对较低.视频或者opengl内容往往是显示在SurfaceView中的 ...
- 7个提高效率的JavaScript调试工具
现在的JavaScript事实上已然成为了流行的web语言,即使它并不完美.很多程序员不喜欢用JavaScript写代码,是因为写到后来总会出现各种莫名其妙的bug,而且在开发大型应用程序的过程中很容 ...
- Android -- getWidth()与getMeasuredWidth()
getWidth() Return the width of the your view. Returns The width of your view, in pixels. 源代码: public ...
- 【Java】Java-fastjson-基本使用方法
Java-fastjson-基本使用方法 fastjson maven_百度搜索 Maven Repository: com.alibaba » fastjson » 1.2.44 fastjson ...
- 【ElasticSearch】ElasticSearch-索引优化-自定义索引
ElasticSearch-索引优化-自定义索引 es 指定 索引 字段_百度搜索 [es]创建索引和映射 - 匡子语 - 博客园 reindex,增加字段,并新增数据 - Elastic中文社区 e ...
- Mac系统下编译支持Android平台的最新X264编码器
Mac系统下编译支持Android平台的最新X264编码器 原文来自 http://www.mingjianhua.com,转载请注明出处 1.首先去官网下载最新的x264源代码,解压到任意目录 ht ...
- sql 根据另一个表的数据更新当前表
--update mchk --set shwdjh=dbo.erpzhong.zhongbz--from erpzhong--where mchk.dwmch=erpzhong.matno
- javascript 将treeNode 转换id和pid的Array
function treeTolist(treeNodes, opt) { if (!opt) { opt = {}; opt.key = "id"; opt.parent = & ...
- Fragment的setUserVisibleHint方法实现懒加载,但setUserVisibleHint 不起作用?
我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在 ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...