2010-12-04 3 views
0

웹에서 가져 오기, 가져 오기, 파일 작업 등과 같은 다양한 작업을 백그라운드 스레드에서 수행하고 있습니다. 각 작업은 NSInvocationOperation을 사용하여 호출됩니다. 각 작업이 완료되면 백그라운드 스레드 작업은 performSelectorOnMainThread:을 호출합니다. 내가 사용하고있는 모델은 백그라운드 작업의 성공 또는 실패 여부에 따라 operationSucceeded 또는 operationFailed을 호출하는 백그라운드 스레드입니다.메모리 관리 규칙을 위반하지 않고 백그라운드 스레드의 NSError 객체를 주 스레드로 전달하는 방법은 무엇입니까?

operationFailed을 호출하면 스레드가 UI로 적절한 조치를 취할 수 있도록 NSError 객체를 기본 스레드로 다시 전달하고자합니다. 예를 들어, 오류의 경우 사용자에게 오류 메시지를 표시하거나 표시하지 않을 수 있습니다.

질문 : 메모리 관리 관련 문제없이 NSError을 주 스레드로 다시 보낼 수 있습니까? NSInvocationOperation을 사용하여 호출되는 각 작업에는 Apple 요구 사항에 따라 NSAutoreleasePool 로컬이 있습니다. performSelectorOnMainThread:withObject:error을 사용하여 NSError 개체를 다시 전달할 때 로컬 NSAutoreleasePoolNSError 개체를 출시하지 않았습니까?

답변

1

아무 것도 할 필요가 없습니다. reference에서 설명한 것처럼 performSelectorOnMainThread:@selector(foo:) withObject:obj은 선택기가 실행될 때까지 obj을 유지합니다.

+0

아 ... 가끔은 너무 바보 같아요. 바로 저 앞에 있어요. "이 메서드는 선택기 수행 될 때까지 수신기 및 arg 매개 변수를 유지합니다." 그게 내가 어렸을 때했던 것처럼 느껴지니까. 내 서랍에서 양말 한 켤레를 찾아 보지 못했습니다. 하지만, 엄마가 들어 와서 바로 위에 올 수있었습니다. 도움을 주셔서 감사합니다. – jschmidt

+0

전혀 문제가 없습니다. 그것은 모두에게 일어납니다. 결국 당신은이 프로그래밍 상황에서 엄마와 같을 것입니다! – Yuji

관련 문제