Objective-C Language
멀티 스레딩
수색…
간단한 스레드 만들기
스레드를 만드는 가장 간단한 방법은 "백그라운드에서"선택기를 호출하는 것입니다. 즉, 선택기를 실행하기 위해 새 스레드가 만들어집니다. 수신 객체는 self
뿐만 아니라 모든 객체가 될 수 있지만 주어진 선택자에 응답해야합니다.
- (void)createThread {
[self performSelectorInBackground:@selector(threadMainWithOptionalArgument:)
withObject:someObject];
}
- (void)threadMainWithOptionalArgument:(id)argument {
// To avoid memory leaks, the first thing a thread method needs to do is
// create a new autorelease pool, either manually or via "@autoreleasepool".
@autoreleasepool {
// The thread code should be here.
}
}
보다 복잡한 스레드 만들기
NSThread
의 하위 클래스를 사용하면 더 복잡한 스레드를 구현할 수 있습니다 (예를 들어, 더 많은 인수를 전달하거나 하나의 클래스에서 관련된 모든 도우미 메서드를 캡슐화 할 수 있음). 또한 NSThread
인스턴스는 속성 또는 변수에 저장 될 수 있으며 현재 상태 (계속 실행 중인지 여부)에 대해 쿼리 할 수 있습니다.
NSThread
클래스는 cancelled
속성을 스레드로부터 안전한 방법으로 YES
로 설정하는 모든 스레드에서 호출 할 수있는 cancel
메서드를 지원합니다. 스레드 구현은 cancelled
속성을 쿼리 (및 / 또는 관찰)하고 main
메소드를 종료 할 수 있습니다. 이것은 작업자 스레드를 정상적으로 종료하는 데 사용할 수 있습니다.
// Create a new NSThread subclass
@interface MyThread : NSThread
// Add properties for values that need to be passed from the caller to the new
// thread. Caller must not modify these once the thread is started to avoid
// threading issues (or the properties must be made thread-safe using locks).
@property NSInteger someProperty;
@end
@implementation MyThread
- (void)main
{
@autoreleasepool {
// The main thread method goes here
NSLog(@"New thread. Some property: %ld", (long)self.someProperty);
}
}
@end
MyThread *thread = [[MyThread alloc] init];
thread.someProperty = 42;
[thread start];
스레드 로컬 저장소
모든 스레드는 현재 스레드에 대해 로컬 인 변경 가능한 사전에 대한 액세스 권한을가집니다. 이렇게하면 각 스레드가 고유 한 변경 가능 사전을 가지므로 잠금 없이도 정보를 쉽게 캐시 할 수 있습니다.
NSMutableDictionary *localStorage = [NSThread currentThread].threadDictionary;
localStorage[someKey] = someValue;
사전은 스레드가 종료 될 때 자동으로 해제됩니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow