在线程之间传输对象所有权?

时间:2011-03-26 23:03:17

标签: objective-c cocoa memory-management thread-safety

假设我有一个创建对象的后台线程。最终需要此对象来更新UI,以便它必须进入主线程。在一个线程上分配一个对象并在另一个线程上释放它似乎很尴尬。这是常见的,还是有更好的模式?考虑:

// Called on a background thread
-(void)workerDoStuff
{
    MyObject *obj = [[MyObject alloc] init];
    [self performSelectorOnMainThread:@selector(updateUI:) withObject:obj];
}

// Performed on main thread
- (void)updateUI:(MyObject *)obj
{
    // Do stuff with obj
    [obj release];
}

由于

1 个答案:

答案 0 :(得分:2)

来自the documentation

  

此方法保留接收器和arg参数,直到执行选择器之后。

因此,您可以在拨打电话后在obj中发布workerDoStuff,因为它会在updateUI:返回之前保留给您。