NSOperation自定义

来源:互联网 发布:opencv python 安装 编辑:程序博客网 时间:2024/05/17 09:13

示例代码如下:

////  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时才将其移除队列,这点在内存管理和避免死锁很关键

0 0
原创粉丝点击