NSOperation의 기본 사용
//1.
:
: ,
: , , nil
NSInvocationOperation *operation = [[NSInvocationOperation alloc]
initWithTarget:self selector:@selector(sel) object:nil];
//2.
[operation start];
# : start ,
# NSOperation NSOperationQueue ,
//1.
NSBlockOperation ,
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
//
NSLog(@"---download1--%@",[NSThread currentThread]);
}];
//2. ,
[operation addExecutionBlock:^{
NSLog(@"---download2--%@",[NSThread currentThread]);
}];
[operation addExecutionBlock:^{
NSLog(@"---download3--%@",[NSThread currentThread]);
}];
//3.
[operation start];
# : NSBlockOperation > 1, ( )
기본 단계:
1. 포장 작업 2.대기열 만들기(기본적으로 동시 대기열) 3, 대기열에 작업 추가
//1.
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
//2.
// :
//
// 1, , 1
// , -1, 0,
queue.maxConcurrentOperationCount = 2;
//
//suspended YES ,suspended NO
// ,
if (self.queue.isSuspended) {
self.queue.suspended = NO;
}else {
self.queue.suspended = YES;
}
//
// , , ,
//
[self.queue cancelAllOperations];
참고: 작업 A는 작업 B에 의존하고 B는 작업 A에 의존할 수 없습니다.
NSOperation 은 스레드 간 통신 지원
//1.
NSOperationQueue *queue =[[NSOperationQueue alloc]init];
//2.
NSBlockOperation *download1 = [NSBlockOperation blockOperationWithBlock:^{
//2.1 url
NSURL *url = [NSURL URLWithString:@"http://img.qiyenet.net/upload/image/2016/03/05/1457133748832510.png"];
//2.2
NSData *data = [NSData dataWithContentsOfURL:url];
//2.3
self.image1 = [UIImage imageWithData:data];
}];
//3. 2
NSBlockOperation *download2 = [NSBlockOperation blockOperationWithBlock:^{
//3.1 url
NSURL *url = [NSURL URLWithString:@"http://www.52tq.net/uploads/allimg/160226/1021043B3-3.jpg"];
//3.2
NSData *data = [NSData dataWithContentsOfURL:url];
//3.3
self.image2 = [UIImage imageWithData:data];
}];
//4.
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
UIGraphicsBeginImageContext(CGSizeMake(200, 200));
[self.image1 drawInRect:CGRectMake(0, 0, 100, 200)];
[self.image2 drawInRect:CGRectMake(100, 0, 100, 200)];
self.image1 = nil;
self.image2 = nil;
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//
[[NSOperationQueue mainQueue]addOperationWithBlock:^{
self.imageView.image = image;
}];
}];
[op addObserver:self forKeyPath:@"isFinished" options:NSKeyValueObservingOptionNew context:nil];
//5.
[op addDependency:download1];
[op addDependency:download2];
//6.
[queue addOperation:op];
[queue addOperation:download1];
[queue addOperation:download2];
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.