iOS 면접 문제의 다선정은 무엇입니까?
나: 다선정, 다선정이지...
만약 모두 이렇게 대답한다면, 얼마나 많은 사람들이 너를 원하겠니?
=====================================================
먼저 멀티스레드 사용 환경을 분석합니다.
멀티스레드 프로세싱에는 Core Data의 멀티스레드 액세스, UI의 병렬 그리기, 비동기식 네트워크 요청 및 런타임 메모리가 부족한 상황에서 큰 파일을 처리하는 방안 등이 포함됩니다.
그 다음으로 iOS가 제공하는 다중 스레드의 실현 방법을 각각 예로 들어 설명한다.
iOS는 다음 중앙 집중식 다중 스레드 구현 방식을 제공합니다.
1. NSOBjcet 구현
//
// 1: ( )
// 2:
[self performSelectorInBackground:@selector(btnUpClicked:)withObject:nil];
2. NSThread 구현
// :
// thread :
// :
// NSThread
NSThread *thread = [[NSThread alloc]initWithTarget:selfselector:@selector(btnUpClicked:)object:nil];
[thread start];
[thread release];
3. NSOperation 구현
// NSOperation
// NSOperation
// (main )
MyOperation *operation = [[MyOperation alloc] init];
[operation start];
[operation release];
//
// NSInvocationOperation *invocation = [[NSInvocationOperation alloc] initWithTarget:<#(id)#> selector:<#(SEL)#> object:<#(id)#>]
NSBlockOperation *block = [NSBlockOperation blockOperationWithBlock:^{
//
}];
@implementation MyOperation
- (void)main
{
// operation main
static int count = 0 ;
for (int i = 0 ; i < 600000000; i ++) {
count ++;
}
NSLog(@"%d", count);
// 0 1
BOOL b = [NSThread isMainThread];
NSLog(@"%d", b);
NSThread *thread = [NSThread currentThread];
NSLog(@" :%@", thread);
}
@end
4.NSOperationQueue
// (NSOperationQueue)
MyOperation *op1 = [[MyOperation alloc] init];
MyOperation *op2 = [[MyOperation alloc] init];
MyOperation *op3 = [[MyOperation alloc] init];
MyOperation *op4 = [[MyOperation alloc] init];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//
[queue setMaxConcurrentOperationCount:2];
[queue addOperation:op1];
[queue addOperation:op2];
[queue addOperation:op3];
[queue addOperation:op4];
// :
// :
5.GCD
// GCD
//
// 1. : Concurrent
// 2. : ( ) Serial
//
// 1:
// 2: DISPATCH_QUEUE_CONCURRENT( )
dispatch_queue_attr_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);
//
// 1:
// 2:
dispatch_async(queue, ^{
[self btnUpClicked:nil];
});
고급 사용법:
// 5
// 1. :
//
dispatch_queue_t mainQueue = dispatch_get_main_queue();
//
// dispatch_async(mainQueue, ^{
// [self btnUpClicked:nil];
// });
// 2. 4 ( )
// 1:
// 2: 0
dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// dispatch_async(globalQueue, ^{
// [self btnUpClicked:nil];
// });
//
// 1.
// dispatch_async(globalQueue, ^{
//
// // ( )
// NSString *str = @"htt://www.baidu.com";
// NSURL *url = [NSURL URLWithString:str];
//
// NSData *data = [NSData dataWithContentsOfURL:url];
// UIImage *image = [UIImage imageWithData:data];
//
// // UI/ UI
// dispatch_async(mainQueue, ^{
//
// UIImageView *imageView = [[UIImageView alloc] init];
// //
// imageView.image = image;
//
// });
// });
// 2.
//
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@" ");
});
// 3. ( )
// 1:
// 2:
// 3:
dispatch_apply(4, globalQueue, ^(size_t a) {
NSLog(@"%zu", a);
});
// 4.
// 1:
// 2:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"=====");
});
GCD로 사람을 위협하는 것을 강력히 건의합니다.이것은 내가 말한 것이 아니라 그들이 정리한 것이다. 어쨌든 쓰기 좋으면 그만이다. 특히 면접관을 만나는 것은 iOS가 개발한 것이 아니다...왼쪽으로 끌고 GCD로 돌아가.한마디로 GCD 만세~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 다중 스레드를 순차적으로 실행하는 몇 가지 방법 요약Java 다중 스레드를 순차적으로 실행하는 몇 가지 방법 요약 동료는 무심결에 이 문제를 제기하고 두 가지 방법을 직접 실천했다.물론 더 좋은 방법이 있을 거야. 방법 1 이런 방법은 비교적 흔히 볼 수 있는 해결 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.