我使用下面的代码传递一个对象来辅助线程:何时释放/保留传递给辅助线程的对象?
(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