2012-04-11 4 views
0

멀티 스레딩에 대한 ios sdk에 대한 내용을 읽었지만 문제의 답을 찾지 못했습니다. 메인 스레드에서 프로그램의 스레드가 일부 속성을 수행합니다 속성의 값이 변경되는 경우 다른 스레드는 변경된 값을 필요로합니다. 그래서 어떻게 모든 스레드에 대해 변경 될 수 있도록 하나의 스레드에서 속성이나 필드의 값을 변경할 수 있습니까?속성/필드 스레드 동기화

답변

3

단일 개체의 속성을 변경하면 기본적으로 "모든 스레드에 대한"값이 변경됩니다. 객체를 직접 만들지 않으면 객체의 스레드 별 사본이 없습니다.

다중 스레드 프로그램의 경우 주요 과제는 두 스레드가 동일한 메모리 (귀하의 경우 속성)를 동시에 액세스/쓰지 않으려는 것입니다. 문제의 속성에 대해이 작업을 수행하는 가장 쉬운 방법 (반드시 가장 효율적이거나 바보 같은 방법은 아님)은 속성 선언에서 "비 원자 (nonatomic)"특성을 제외하는 것입니다. (편집 :.이 사용자 정의 최우선의 getter 또는 setter를 가지고도 @dynamic 당신의 특성을 구현하기 위해 @synthesize을 사용하고하지 않는 가정)

멀티 스레딩은 큰 주제의 비트가 여기에 포함하는 것입니다,하지만 애플의 문서입니다 더 많은 정보를 시작할 수있는 좋은 곳 : http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html

+0

가장 쉬운 방법은 잠금 장치가 아닙니까? – CodaFi

+1

속성 선언에 "nonatomic"을 지정하지 않으면 컴파일러에서 백그라운드에서 잠금 코드를 삽입합니다. 이것은 여러분이'@ synthesize'-ing라고 가정하고 있습니다. 수정 된 답변은이를 명확히합니다. – MechEthan

+0

그래,하지만 속성 선언에 "비 원자"속성을 포함시키지 않았습니다.하지만 값은 주 스레드 나 하나의 스레드에서만 변경되지만 필요한 스레드 나 스레드에서는 변경되지 않습니다. – Alexander