假设我有一个创建对象的后台线程。最终需要此对象来更新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];
}
由于
答案 0 :(得分:2)
此方法保留接收器和arg参数,直到执行选择器之后。
因此,您可以在拨打电话后在obj
中发布workerDoStuff
,因为它会在updateUI:
返回之前保留给您。