iOS - NSOperation 및 NSOperationQueue
:Mitchell
1. NSOperation 소개
NSInvocationOperation、NSBlockOperation
2. NSInvocation Operation
NSInvocationOperation *op1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(demo) object:nil];
[op1 start];
3. NSBlockOperation
//1、 Operation
NSBlockOperation*op = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"1 - %@",[NSThread currentThread]);
}];
//2、
// ,
// , ,
[op addExecutionBlock:^{
NSLog(@"2 - %@",[NSThread currentThread]);
}];
[op addExecutionBlock:^{
NSLog(@"3 - %@",[NSThread currentThread]);
}];
4. 사용자 정의 Operation
( block main )
MitchellOperation*op = [[MitchellOperation alloc]init];
[op start];
#import "MitchellOperation.h"
@implementation MitchellOperation
-(void)main{
//
NSLog(@"%s%@",__func__,[NSThread currentThread]);
}
@end
5. NSOperationQueue
1、
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
2、
2.1 NSInvocationOperation
NSInvocationOperation*op1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(demo) object:nil];
2.2 NSBlockOperation
NSBlockOperation*op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"%@",[NSThread currentThread]);
}];
3、
[queue addOperation:op1];
[queue addOperation:op2];
6. NSOperationQueue의 직렬 및 동시
maxConcurrentOperationCount = 0
7. NSOperationQueue 일시 중지, 복구, 취소
:
self.queue.suspended = !self.queue.suspended;
+ 작업 취소: -
:
* 작업을 일시 중지한 것처럼 취소해도 현재 실행 중인 작업은 취소되지 않습니다.*그래서 시간을 소모하는 조작을 실행할 때 코드를 한 단락씩 실행한 후에 현재 조작이 취소되었는지 판단해야 성능을 절약할 수 있다. [self.queue cancelAllOperations];
8. NSOperationQueue 작업 간의 의존과 감청
[op2 addDependency:op1];
op1.completionBlock = ^(){
NSLog(@" 1 ");
};
NSOperationQueue*queue = [[NSOperationQueue alloc]init];
//
NSOperation*op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@" 1");
}];
//
NSOperation*op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@" 2");
}];
NSOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@" 3");
//
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSLog(@" ");
}];
}];
//
op1.completionBlock = ^(){
NSLog(@" 1 ");
};
op2.completionBlock = ^(){
NSLog(@" 2 ");
};
//
// , ,
// :
//1、 ,
//2、NSOperation
[op2 addDependency:op1];
[op3 addDependency:op2];
[queue addOperation:op1];
[queue addOperation:op2];
[queue addOperation:op3];
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.