创建异步的NSOperation
Posted techfu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建异步的NSOperation相关的知识,希望对你有一定的参考价值。
#import "ConcurrentOperation.h"
@interface ConcurrentOperation()
BOOL executing;
BOOL finished;
@property (nonatomic, copy)NSString *cusName;
@end
@implementation ConcurrentOperation
- (id)init
self = [super init];
if (self)
executing = NO;
finished = NO;
return self;
- (instancetype)initWithName:(NSString *)name
self = [super init];
if (self)
executing = NO;
finished = NO;
_cusName = name;
return self;
//- (BOOL)isConcurrent
// return YES;
//
- (BOOL)isAsynchronous
return YES;
- (BOOL)isExecuting
return executing;
- (BOOL)isFinished
return finished;
- (void)start
// Always check for cancellation before launching the task.
NSLog(@"%@----start-----------------", _cusName);
if ([self isCancelled])
// Must move the operation to the finished state if it is canceled.
[self willChangeValueForKey:@"isFinished"];
finished = YES;
[self didChangeValueForKey:@"isFinished"];
return;
// If the operation is not canceled, begin executing the task.
[self willChangeValueForKey:@"isExecuting"];
[NSThread detachNewThreadSelector:@selector(main) toTarget:self withObject:nil];
executing = YES;
[self didChangeValueForKey:@"isExecuting"];
- (void)main
@try
// Do the main work of the operation here.
NSInteger i = 1000;
while (i--)
NSLog(@"%@----main---", _cusName);
[self completeOperation];
@catch(...)
// Do not rethrow exceptions.
- (void)completeOperation
[self willChangeValueForKey:@"isFinished"];
[self willChangeValueForKey:@"isExecuting"];
executing = NO;
finished = YES;
[self didChangeValueForKey:@"isExecuting"];
[self didChangeValueForKey:@"isFinished"];
以上是关于创建异步的NSOperation的主要内容,如果未能解决你的问题,请参考以下文章
GCD的同步异步串行并行NSOperation和NSOperationQueue一级用dispatch_once实现单例
iOS开发-91GCD的同步异步串行并行NSOperation和NSOperationQueue一级用dispatch_once实现单例(转载)