标签:好的 image cut 对象 定义 current nil ati 具体步骤
NSOperation是基于GCD的封装更加面向对象,在使用上也是有任务跟队列的概念,分别对应两个类NSOperation 、NSOperationQueue
NSOperation和NSOperationQueue实现多线程的具体步骤
NSOperation是一个抽象类,使用时候需要使用其子类。NSOperation总共有两个子类。
开发中一般NSOperation子类通常与NSOperationQueue一起使用才能更好的开辟线程。
NSOperation可以调用start方法类执行任务,但默认是同步的。如果将NSOperation添加到NSOperationQueue中执行,系统会自动异步执行NSOperation中的操作。
NSOperationQueue只用两种类型,分别是主队列跟非主队列(包含串行、并发)。两种队列的获取方式:
[NSOperationQueue mainQueue]; // 主队类
[[NSOperationQueue alloc] init]; // 非主队列
凡是添加到主队列的任务都是在主线程中执行。非主队列的任务会自动添加到子线程中执行。并发跟串行通过队列的maxConcurrentOperationCount决定。
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(task) object:nil];
[queue addOperation:operation];
// [operation start];
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"------------%@", [NSThread currentThread]);
}];
// 添加额外的任务才会在子线程执行
[blockOperation addExecutionBlock:^{
NSLog(@"------------%@", [NSThread currentThread]);
}];
[queue addOperation:blockOperation];
// [blockOperation start];
}
- (void)task
{
NSLog(@"------------%@", [NSThread currentThread]);
}
一旦NSOperation添加进NSOperationQueue,无须调用NSOperation的start方法,内部自动回调用NSOperation的start。
开发中还可以自定义NSOperation的方式,重写main方法将任务封装进来。如果任务的代码比较多,在很多程序的很多地方都需要使用,建议采用这种方式。
#import "FMOperation.h"
@implementation FMOperation
- (void)main
{
// 封装任务
}
@end
标签:好的 image cut 对象 定义 current nil ati 具体步骤
原文地址:https://www.cnblogs.com/CoderHong/p/8849641.html