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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值