iOS 멀티스레드 면접 문제
4717 단어 ios
1. 프로세스 및 스레드
우리가 수동으로 개척한 서브라인입니다. 초기화 방식을 사용하려면 우리가 직접 시작해야 합니다. 구조기 방식을 사용하면 자동으로 시작됩니다.우리가 수동으로 개척한 라인이라면, 모두 우리 스스로 이 라인을 관리해야 한다. 시작뿐만 아니라, 이 라인을 사용한 후의 자원 회수도 필요하다
NSThread \*thread = \[\[NSThread alloc\] initWithTarget:self selector:@selector(testThread:) object:@" "\]; // start \[thread start\]; // thread.name = @"NSThread "; // Thread 0 ~ 1 。 , , , , 0.5 thread.threadPriority = 1; // \[thread cancel\]; // \[NSThread detachNewThreadSelector:@selector(testThread:) toTarget:self withObject:@" "\];
* // 。 1s 。 OC : \[self performSelector:@selector(aaa) withObject:nil afterDelay:1\]; // 。waitUntilDone: , YES: , ; NO: , \[self performSelectorOnMainThread:@selector(aaa) withObject:nil waitUntilDone:YES\]; // \[self performSelectorInBackground:@selector(aaa) withObject:nil\]; // \[self performSelector:@selector(aaa) onThread:\[NSThread currentThread\] withObject:nil waitUntilDone:YES\]
주의해야 할 것은 애프터 딜레이가 있는 시간 지연 함수라면 내부에 NSTimer를 만들고 현재 라인의 Runloop에 추가합니다.즉 현재 라인이runloop을 열지 않으면 이 방법은 효력을 상실합니다.하위 라인에서runloop을 시작해야 합니다. (호출 순서 주의)
\[self performSelector:@selector(aaa) withObject:nil afterDelay:1\]; \[\[NSRunLoop currentRunLoop\] run\];
performSelector: withObject: 단순한 메시지 발송일 뿐 시간과 아무런 관계가 없다.그래서 서브라인에 추가할 필요가 없는 Runloop에서도 실행할 수 있어요.
2. GCD 대비 NSOprationQueue
우리는 NSOperationQueue와 GCD 간의 관계를 명확히 해야 한다. GCD는 밑바닥을 향한 C 언어의 API이고 NSOpertaionQueue는 GCD로 포장된 GCD의 고급 추상이다.1. GCD의 실행 효율이 높고 대기열에서 실행되는 것은 Block으로 구성된 작업이기 때문에 이것은 경량급 데이터 구조로 쓰기에 더욱 편리하다. 2. GCD는 FIFO의 대기열만 지원하고 NSOperationQueue는 최대 병발수를 설정하고 우선순위를 설정하며 의존 관계를 추가하는 등 실행 순서를 조정할 수 있다. 3. NSOperationQueueueue는 심지어 대기열을 뛰어넘어 의존 관계를 설정할 수 있지만 GCD는 직렬 대기열을 설정할 수 밖에 없다.또는 대기열에 barrier(dispatch barrier async) 작업을 추가해야 실행 순서를 제어할 수 있습니다. 비교적 복잡합니다. 4. NSOperationQueueue는 대상을 대상으로 하기 때문에 KVO를 지원하고 Operation이 실행 중(isExecuted), 종료(isFinished), 취소(isCanceld) 여부를 모니터링할 수 있습니다.
GCD 실행 원리?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.