我知道UI应该只在主线程上更新,但是可以在单独的线程上创建和添加子视图,只要它们没有添加到可见视图中吗?它会导致内存和性能问题吗?这是一些示例代码。
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperationWithBlock:^{
// do some fancy calculations, building views
UIView *aView = ..
for (int i, i<1000, i++)
{
UIView *subView = …
[aView addSubview:subView];
}
// Update UI on Main Thread
[queue addOperationWithBlock:^{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
// Update the interface
[self.view addSubview:aView];
}];
}];
}];
答案 0 :(得分:3)
我对你不想这样做的理解是CALayer
由非线程安全的内存支持。因此,您可以在后台线程上绘图,但不能渲染图层或操纵视图。
所以你要做的是将复杂的视图逻辑绘制到图像上下文中,然后将图像传递给主线程,以便在图像视图中显示。
希望这有帮助!
答案 1 :(得分:2)
辅助线程上的UI更改将导致应用程序崩溃。所以总是在主线程上进行UI更改。
[self performSelectorOnMainThread:@selector(makeUIChanges:) withObject:nil waitUntilDone:YES];