2009-04-16 1 views
0

:내가 다음 코드를 코코아 터치에서 별도의 스레드 생성 할 수 있습니다 알고

 [NSThread detachNewThreadSelector:@selector(getEarthquakeData) toTarget:self withObject:nil]; 

어떻게 내 주 스레드의 프로세스에 다시 이동을 ? 나는이 코드로 위임에서이 작업을 수행 할 수 있습니다 알고 : 메인 스레드가 컨트롤러가 아닌 이상 같은 대리자에서 실행 된 경우

[(id)[[UIApplication sharedApplication] delegate] performSelectorOnMainThread:@selector(addToEarthquakeList:) withObject:self.currentEarthquakeObject waitUntilDone:YES]; 

가 어떻게 위 할 것입니다.

감사합니다.

답변

0

당신은 할 수 있습니까? (나는 당신이 메인 쓰레드에서 컨트롤러 메소드를 실행하는 방법을 묻고 있다고 생각했다.)

+0

컨트롤러를 얻으려면 어떻게해야합니까? 새 컨트롤러를 인스턴스화하면 위의 코드로 경고 메시지가 나타납니다. 경고 수신자가 전달 클래스이고 해당 @interface가 존재하지 않을 수 있습니다 그래서 인스턴스화해야합니까? 또는이 컨트롤러를 performSelectorOnMainThread로 가져 오려면 어떻게해야합니까? – Atma

+0

어떤 개체를 메서드라고 부릅니까? 당신은 백그라운드 스레드에서 사용할 수있는 객체에 대한 참조가 필요합니다. 전달하거나 (잠글 수있는 또는 원자적인) 속성 또는 액세스 할 수있는 다른 것 중 일부일 수도 있습니다. – philsquared

+0

@Joe, 저는 아마도 '자기'가 당신이 관심을 가진 컨트롤러 객체라고 생각했을 것입니다. –

0

당신은 전화를 할 권리가 있습니다. performSelectorOnMainThread:...로 전화하면 주 스레드의 실행 루프에서 요청이 대기하게됩니다. 즉, 처리가 먼저 완료 될 때 주 스레드가 다른 곳에서 실행중인 경우입니다. 주 스레드 코드가 실행 루프로 돌아 오면 백그라운드 스레드의 요청을보고 호출 할 수 있습니다.

실행 루프가 처리 대기중인 다른 이벤트가있는 경우 무엇이 우선 순위를 결정하는지 알지 못합니다. 그러나 일반적으로 다음 번 실행되는 것으로 간주 할 수는 없습니다. 이것은 주 스레드 순차 처리를 최소한으로 유지해야하는 또 다른 이유입니다. 즉, 주 스레드에서 장시간 실행되는 시퀀스가 ​​없도록 시도하십시오.하지만 그 이유는 처음부터 백그라운드 스레드를 사용하고있는 이유 일 것입니다.

[controller performSelectorOnMainThread:@selector(addToEarthquakeList:) withObject:self.currentEarthquakeObject waitUntilDone:YES]; 

을 ... 아니면 내가 질문을 잘못 해석 않았다

관련 문제