NSOperation自定义
2015-11-30 17:02
344 查看
示例代码如下:
NSOperation提供了
// // MyOperation.m // Test9 // // Created by lagou on 15/11/30. // Copyright © 2015年 lagou. All rights reserved. // #import "MyOperation.h" @interface MyOperation() @property (assign, nonatomic, getter = isExecuting) BOOL executing; @property (assign, nonatomic, getter = isFinished) BOOL finished; @property(nonatomic, strong) NSURLRequest *request; @property(nonatomic, strong) NSURLSession *session; @property(nonatomic, strong) NSString *threadName; @end @implementation MyOperation @synthesize executing = _executing; @synthesize finished = _finished; - (id)initWithName:(NSString *)name{ if (self = [super init]) { _threadName = name; _executing = NO; _finished = NO; } return self; } - (void)start { if (self.isCancelled) { self.finished = YES; return; } self.executing = YES;//不知道有没有必要写 //开启任务 .......
//结束任务 [self done]; return; } //执行完了一定要调用done,否则不认为执行结束了 - (void)done { self.finished = YES; self.executing = NO; [self reset]; } - (void)reset { } - (void)setFinished:(BOOL)finished { [self willChangeValueForKey:@"isFinished"]; _finished = finished; [self didChangeValueForKey:@"isFinished"]; } - (void)setExecuting:(BOOL)executing { [self willChangeValueForKey:@"isExecuting"]; _executing = executing; [self didChangeValueForKey:@"isExecuting"]; }
//这两个函数 根本就没调用到 而且写不写都是并发的 奇怪 - (BOOL)isConcurrent { return YES; } //iOS8之后 - (BOOL)isAsynchronous { return YES; } @end
NSOperation提供了
ready
cancelled
executing
finished这几个状态变化,我们的开发也是必须处理自己关心的其中的状态。这些状态都是基于keypath的KVO通知决定,所以在你手动改变自己关心的状态时,请别忘了手动发送通知。这里面每个属性都是相互独立的,同时只可能有一个状态是YES。
finished这个状态在操作完成后请及时设置为YES,因为NSOperationQueue所管理的队列中,只有isFinished为YES时才将其移除队列,这点在内存管理和避免死锁很关键。
相关文章推荐
- 架构-项目管理-gerrit
- Linux下LVM 硬盘空间扩充及命令介绍
- ShellSort
- [OpenCV] 编译源程序 2.4.10 以支持 CUDA
- [OpenCV] 编译源程序 2.4.10 以支持 CUDA
- 树莓派安装Linux操作系统
- shell 脚本
- Linux或OS X系统常用命令-文件操作
- 智能指针(二):scoped_ptr
- unfortunately XXX has stopped多国语言
- powershell启用脚本
- Linux串口编程
- 使用PropertyChangeSupport监听变量变化
- nginx url rewrite之thinkphp示例
- 查看LINUX进程内存占用情况
- Linux权限解释
- Centos下《LVM扩展目录空间 及命令介绍》
- 关于java,tomcat连接mySql数据库
- [Linux] Wireshark 抓到超过(大于) MTU 的封包
- Opencv中的DMatch