2011-10-07 1 views
0

detachNewThreadSelectorperformSelectorInBackground과 다른 것으로 작동합니까?/초기화를 ALLOC 것, imgDlThread와 스레드 개체에 액세스 할 수있는 외에, 또한detachNewThreadSelector는 NSThread performSelectorInBackground 또는 NSThread alloc/init과 다른 점이 있습니까?

[NSThread detachNewThreadSelector:@selector(startImageDownloads:) toTarget:self withObject:[NSNumber numberWithInt:dataType]]; 

그리고 내 프로젝트에서 나는이 많이 사용

[self performSelectorInBackground:@selector(startImageDownloads:) withObject:[NSNumber numberWithInt:dataType]]; 

을하지만 어떤 다를 수 일 것 '다음 start 스레드를 보내고 그 다음 어떤 다른 첫 2 일을 보내고 :

NSThread *imgDlThread = [[NSThread alloc] initWithTarget:self selector:@selector(startImageDownloads:) object:[NSNumber numberWithInt:dataType]]; 
[imgDlThread start]; 

감사합니다!


편집 :

인가 : 그냥 거기에 아직 performSelectorInBackgrounddetachNewThreadSelector의 차이 (또는 부족)에 대한 여러 답변, 그래서 내가 내 유일한 질문은 추측 실현

할당 및 초기화 NSThread 다른 호출 후 [thread start] 다른 처음 2?

답변

1

세 번째 방법과 첫 번째 두 가지 유일한 차이점은 메모리 관리입니다. 스레드를 할당 할 때 스레드는 스레드가 할당 해제 될 때만 해제되도록 target을 유지합니다. detatchNewThreadSelector:performSelectorInBackground: 메서드는 모두 자동으로 결과가 생성되어 NSThread으로 생성됩니다. 즉 스레드가 실행을 완료하면 target이 릴리스됩니다.

제공 한 코드 (스레드를 할당하고 시작)에서 imgDlThread이 유출되었습니다. 즉, target은 절대로 누출되지 않으며 다시 누출됩니다. 당신이 autorelease 또는 정기적으로 출시 imgDlThread 그것을 시작하면, 그것은 detachNewThreadSelector:와 동일한 효과를 갖습니다.