自定义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 ...
随机推荐
- JS中三目运算符和if else的区别,你弄得明白吗
今天写了一个图片轮播的小demo,用到了判断 先试了一下if else,代码如下: if(n >= count-1){ n =0; }else{ n ++; } 随后代码写完了,准备优化 ...
- jQuery UI全教程之一(dialog的使用教程)
jQuery UI目前的版本已经更新到了1.8.7.个人感觉和easyui相比起来,jQuery UI在界面的美观程度和可定制型更强一些.所以再次将一些jQuery UI组件的用法说明一下,方便日后查 ...
- Android -- startActivityForResult和setResult
startActivityForResult与startActivity的不同之处 startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivit ...
- Android -- Canvas java.lang.UnsupportedOperationException
干货 java.lang.UnsupportedOperationException at android.view.GLES20Canvas.clipPath(GLES20Canvas.java:2 ...
- 【Spark】Spark-性能调优-系列文章
Spark-性能调优-系列文章 Spark Master at spark://node-01:7077 scala java8_百度搜索 (1 封私信)如何评价Linkedin决定逐渐减少Scala ...
- 【图片识别】java 图片文字识别 ocr (转)
http://www.cnblogs.com/inkflower/p/6642264.html 最近在开发的时候需要识别图片中的一些文字,网上找了相关资料之后,发现google有一个离线的工具,以下为 ...
- Spring(十九):Spring AOP(三):切面的优先级、重复使用切入点表达式
背景: 1)指定切面优先级示例:有的时候需要对一个方法指定多个切面,而这多个切面有时又需要按照不同顺序执行,因此,切面执行优先级别指定功能就变得很实用. 2)重复使用切入点表达式:上一篇文章中,定义前 ...
- GLFW_KEY_KP_ADD和GLFW_KEY_KP_SUBTRACT
这两个键的代码分别为: GLFW_KEY_KP_ADD(334) GLFW_KEY_KP_SUBTRACT(333) 对应的是键盘右侧数字面板上的+ -键.
- pycharm下设置自己的模板
在File---settings---File and Code Templates---Python script 脚本里添加: #!usr/bin/env python #-*- coding:u ...
- Camtasia Studio CamStudio如何导出为手机视频
把视频拖放到左侧窗口,再按住拖放到下方的时间轴 点击生成并共享,然后设置为自定义生成设置 这里选择MP4,然后下一步 到这一步的时候,选择视频大小为自定义 会弹出窗口,手动输入宽360 ...