2011-08-25 6 views
0

저는 iOS 용 멀티 스레드 응용 프로그램을 작성하고 있습니다. Objective-C를 처음 접해 왔기 때문에 이전에 iPhone에서 스레드를 사용 해보지 못했습니다. 자바를 사용하는 경우코코아 터치 스레딩 문제가 있습니다.

는 일반적으로, 나는 스레드를 생성하고 스레드 대상으로 "자기"를 보냅니다. 그리고 그 스레드로부터 주 스레드를 호출 할 수 있습니다. 목표 C에서 어떻게 수행됩니까?

나는 스레드에서 메인 스레드를 호출 할 수있는 방법

? 나는 NSNotificationCenter으로 시도하고있다,하지만 난 sigbart 오류가 발생합니다 :/

이 스레드를 시작하는 방법입니다

NSArray *extraParams = [NSArray arrayWithObjects:savedUserName, serverInfo, nil];  // Parameters to pass to thread object 

NSThread *myThread = [[NSThread alloc] initWithTarget:statusGetter      // New thread with statusGetter 
              selector:@selector(getStatusFromServer:) // run method in statusGetter 
               object:extraParams];      // parameters passed as arraylist 
[myThread start];                  // Thread started 

activityContainerView.hidden = NO; 
[activityIndicator startAnimating]; 

어떤 도움도 좋을 것!

답변

1

당신은 메인 스레드의 실행 루프에 메시지를 추가하여이 작업을 수행.

재단은 특히,이를 위해 -[NSObject performSelectorOnMainThread:withObject:waitUntilDone:]NSInvocation 일부 편의 시설을 제공합니다. 알림이 보조 스레드 (자주 호출 스레드)에서 파견 할 수있다

[self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:NO]

: 전자를 사용하여

, 당신은 단순히 뭔가를 쓸 수 있습니다. 이 비록

0

는 귀하의 질문에 내가보기 엔 당신이 Grand Central Dispatch 살펴 보도록 권장 할에 직접 대답하지 않습니다. 일반적으로 스레드를 직접 사용하는 것보다 성능이 좋습니다.

저스틴 지적, 당신은 항상 당신이 정말 너무 필요한 경우, performSelectorOnMainThread를 호출하여 메인 스레드에서 함수를 수행 할 수 있습니다.

1

당신은 performSelectorOnMainThread:withObject:waitUntilDone:를 사용할 수 있습니다 또는 당신이 아이폰 OS 4를 대상으로하는 경우와 나중에 방법을 구현할 필요가 없습니다 그랜드 센트럴 파견, 그냥 메인 스레드와 동기화 :

dispatch_async(dispatch_get_main_queue(),^{ 
    // Do stuff on the main thread here... 
}); 

이렇게하면 코드를 더 쉽게 읽을 수 있습니다.