我有一个线程在循环中修改传递给对象的指针(在调用线程中分配并保留)。如果我将指针放在自动释放池中,我有时会得到错误,因为该对象在不应该被释放时被释放。我把它从自动释放池中取出来,这似乎有效。但是,我担心内存泄漏,因为如果我根本不使用自动释放池,我会严重泄漏。
-(void)my_thread:(NSArray*)parameters;
{
//keep this out of the autorelease pool
Object *theObject;
[[parameters objectAtIndex:2] getValue:&theObject];
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//do stuff to theObject
[pool release];
}
答案 0 :(得分:1)
鉴于此:
-(void)my_thread:(NSArray*)parameters;
{
...
}
方式,parameters
在所述方法是线程的入口点时有效,如果参数已由产卵线程保留。 不保留并自动释放,但只是保留。
换句话说:自动释放池永远不会有助于线程安全。自动释放的对象永远不能安全地遍历线程边界。必须在发送线程中保留对象的硬保留,并且接收线程必须释放所述对象。故事结束。
或代码:
-(void)my_thread:(NSArray*)parameters;
{
... do your stuff here, including your autorelease pool dance
[parameters release];
}