我应该将传递的vars /对象从自动释放池中删除吗?

时间:2010-09-16 03:18:40

标签: objective-c multithreading xcode

我有一个线程在循环中修改传递给对象的指针(在调用线程中分配并保留)。如果我将指针放在自动释放池中,我有时会得到错误,因为该对象在不应该被释放时被释放。我把它从自动释放池中取出来,这似乎有效。但是,我担心内存泄漏,因为如果我根本不使用自动释放池,我会严重泄漏。

-(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];
}

1 个答案:

答案 0 :(得分:1)

鉴于此:

-(void)my_thread:(NSArray*)parameters;
{       
...
}

方式,parameters在所述方法是线程的入口点时有效,如果参数已由产卵线程保留保留并自动释放,但只是保留。

换句话说:自动释放池永远不会有助于线程安全。自动释放的对象永远不能安全地遍历线程边界。必须在发送线程中保留对象的硬保留,并且接收线程必须释放所述对象。故事结束。

或代码:

-(void)my_thread:(NSArray*)parameters;
{     
    ... do your stuff here, including your autorelease pool dance
    [parameters release];  
}