스레드가 시작된 시나리오에서 부모 스레드의 메서드에 여전히 액세스 할 수 있습니까? 이 메서드를 호출하는 특정 방법이 있습니까? 그렇다면 무엇입니까?객관적인 관점에서 멀티 스레드는 어떻게 작동합니까?
참고 : 내 시나리오에서 두 스레드는 데이터 조작을위한 것이며, 인터페이스 관련 스레드가 아닙니다. (이것은 .NET에서 고려해야 할 것으로 알고 있으며, Objective-c에 있다는 것을 모릅니다.)
스레드가 시작된 시나리오에서 부모 스레드의 메서드에 여전히 액세스 할 수 있습니까? 이 메서드를 호출하는 특정 방법이 있습니까? 그렇다면 무엇입니까?객관적인 관점에서 멀티 스레드는 어떻게 작동합니까?
참고 : 내 시나리오에서 두 스레드는 데이터 조작을위한 것이며, 인터페이스 관련 스레드가 아닙니다. (이것은 .NET에서 고려해야 할 것으로 알고 있으며, Objective-c에 있다는 것을 모릅니다.)
정의에 의한 스레드는 상위 스레드의 상태를 공유합니다. 당신은 작업자 스레드를 생성 할 경우 오브젝티브 -c에서 & 메인 스레드에 대한 몇 가지 방법을 호출 할이이 경우 소위
[self performSelectorOnMainThread:@selector(someMethod:) withObject:nil waitUntilDone:NO];
같이 수행 할 수 있습니다, 그것은 그랜드 센트럴 디스패치를 사용하는 (GCD) 최고입니다 NSThead 또는 NSOperation을 직접 사용하는 대신 동시성의
소개 그랜드 센트럴 파견 :
dispatch_queue_t backgroundQueue = dispatch_queue_create("com.example.exampleQueue", 0);
dispatch_async(backgroundQueue, ^{
// operate on data in the background here
NSData *stuff = [self doSomethingComplex];
dispatch_async(dispatch_get_main_queue(), ^{
// Perform Task back in the main thread
[viewController updateStuff:stuff];
});
});
이 : 귀하의 예제와 http://cocoasamurai.blogspot.com/2009/09/guide-to-blocks-grand-central-dispatch.html
, 당신은이 기능을 달성하기 위해 그랜드 센트럴 파견에 중첩 호출을 사용할 수 있습니다 방법은 이러한 종류의 작업을 수행하는 데 선호되는 방법입니다. 또한 블록을 활용함으로써 클래스 내에서 여러 메소드를 예제로 작성하지 않고도 코드를 쉽게 이해할 수 있습니다.
인터페이스 항목이 아니거나 호출 할 수있는 인터페이스 요소가있는 경우 @syschronise(obj)
또는 NSLock
과 같이 모든 언어에서 수행해야하는 일반적인 스레드 안전 작업을 수행 할 수 있습니다. 하지만 인터페이스 물건이 될 물건이라면 'Srikar'가 큐에 효과적으로 메시지를 배치 할 [self performSelectorOnMainThread:@selector(setDataCount:) withObject:count waitUntilDone:NO];
이라고 썼습니다.