iOS 멀티스레드 개발의 NSOperation 사용법 요약
NSOperation 및 NSOperationQueue와 함께 멀티스레드 프로그래밍 가능
NSOperation 및 NSOperationQueue의 멀티스레드 구현 단계
-(id)initWithTarget:(id)targetselector:(SEL)selobject:(id)arg;
-(void)start;
일단 조작을 실행하면 target의sel 방법을 호출합니다
NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run) object:nil];
[op start];
- (void)run
{
NSLog(@"------%@", [NSThread currentThread]);
}
+(id)blockOperationWithBlock:(void(^)(void))block;
-(void)addExecutionBlock:(void(^)(void))block;
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
//
NSLog(@" 1------%@", [NSThread currentThread]);
}];
// ( )
[op addExecutionBlock:^{
NSLog(@" 2------%@", [NSThread currentThread]);
}];
[op addExecutionBlock:^{
NSLog(@" 3------%@", [NSThread currentThread]);
}];
[op addExecutionBlock:^{
NSLog(@" 4------%@", [NSThread currentThread]);
}];
[op start];
-(void)addOperation:(NSOperation*)op;
-(void)addOperationWithBlock:(void(^)(void))block;
//
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"download1 --- %@", [NSThread currentThread]);
}];
//
[queue addOperation:op1];
//
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//
[queue addOperationWithBlock:^{
NSLog(@"download1 --- %@", [NSThread currentThread]);
}];
NSOperationQueue의 대기열 유형과 GCD의 대기열 유형 비교
[NSOperationQueue mainQueue]
- (NSOperation),
[[NSOperationQueue alloc] init]
- : 、
- (NSOperation),
최대 동시 발생
-(NSInteger)maxConcurrentOperationCount;
-(void)setMaxConcurrentOperationCount:(NSInteger)cnt;
//
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//
// queue.maxConcurrentOperationCount = 2;//
queue.maxConcurrentOperationCount = 1; //
//
[queue addOperationWithBlock:^{
NSLog(@"download1 --- %@", [NSThread currentThread])
}];
[queue addOperationWithBlock:^{
NSLog(@"download2 --- %@", [NSThread currentThread])
}];
[queue addOperationWithBlock:^{
NSLog(@"download3 --- %@", [NSThread currentThread])
}];
-(void)cancelAllOperations;
팁: NSOperation의 - (void) cancel 메서드를 호출하여 개별 작업을 취소할 수도 있습니다.
-(void)setSuspended:(BOOL)b;// YES ,NO
- (BOOL)isSuspended
// ,
// self.queue.suspended = NO;
// ( ) ,
// self.queue.suspended = YES;
//
[self.queue cancelAllOperations];
운영 의존성
[operationB addDependency:operationA];// B A
//
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"download1----%@", [NSThread currentThread]);
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"download2----%@", [NSThread currentThread]);
}];
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"download3----%@", [NSThread currentThread]);
}];
// ( op3 op1 op2 )
[op3 addDependency:op1];
[op3 addDependency:op2];
[[[NSOperationQueue alloc] init] addOperationWithBlock:^{
//
NSURL *url = [NSURL URLWithString:@"http://img.pconline.com.cn/images/photoblog/9/9/8/1/9981681/200910/11/1255259355826.jpg"];
//
NSData *data = [NSData dataWithContentsOfURL:url];
//
UIImage *image = [UIImage imageWithData:data];
//
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
self.imageView.image = image;
}];
}];
조작의 감청
-(void(^)(void))completionBlock;
-(void)setCompletionBlock:(void(^)(void))block;
NSOperation 사용자 지정
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.