我使用下面的代碼傳遞一個對象來輔助線程:何時釋放/保留傳遞給輔助線程的對象?
(void)login:(id)sender
{
platformMsgs_LoginRequest *loginRequest = [[[platformMsgs_LoginRequest alloc] init] autorelease];
//more code...
[NSThread detachNewThreadSelector:@selector(sendLoginRequest:) toTarget:self withObject:loginRequest];
//more code...
}
- (void)sendLoginRequest:(platformMsgs_LoginRequest *)loginRequest
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[loginRequest retain];
NetSuiteBinding *binding = [NetSuiteServiceSvc NetSuiteBinding];
NetSuiteBindingResponse *response = [binding loginUsingParameters:loginRequest applicationInfo:nil partnerInfo:nil];
[self performSelectorOnMainThread:@selector(loginOperationCompleted:) withObject:response waitUntilDone:NO];
[loginRequest release];
[pool drain];
}
我的問題是,被自動釋放處理這個對象釋放正確的方式?一旦它傳遞到輔助線程,我保留它並在不再需要時釋放它。
但是,autorelease是否有可能在輔助線程有機會保留它之前釋放對象?我是否必須爲此創建一個ivar ?,以便我可以在performSelectorOnMainThread?中釋放該對象。在登錄後我不再需要這個對象,所以一個ivar似乎不是正確的路。處理這個問題的最好方法是什麼?謝謝。
-Oscar
謝謝,應該查看文檔=)。 – 2010-02-09 23:26:27