何时释放/保留传递给辅助线程的对象?

Osc*_*mez 5 iphone variables arguments retain nsthread

我使用以下代码将对象传递给辅助线程:

 (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];
 }
Run Code Online (Sandbox Code Playgroud)

我的问题是,自动释放正确的方法来处理这个对象的释放吗?一旦它传递给辅助线程,我保留它并在我不再需要它时释放它.

但是,自动释放可能会在辅助线程有机会保留它之前释放对象吗?我是否必须为此创建一个ivar?以便我可以在performSelectorOnMainThread中释放该对象?登录后我不再需要该对象,因此ivar似乎不是正确的方法.处理这个问题的最佳方法是什么?谢谢.

-Oscar

Ole*_*ann 5

detachNewThreadSelector:toTarget:withObject:您的问题的答案文档:

在执行分离线程期间保留对象aTarget和anArgument,然后释放.

所以是的,您可以在调用detachNewThreadSelector后自动释放对象或显式释放它.而且您不必在辅助线程中保留该对象.