在后台线程上构buildUIViews

我知道UI只应该在主线程上更新,但是可以在单独的线程上创build和添加子视图,只要它们不被添加到可见视图中。 会造成内存和性能问题吗? 这是一些示例代码。

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

我对你为什么不想这样做的理解是, CALayer是由非线程安全的内存支持的。 所以你可以绘制一个后台线程,但不能渲染图层或操作视图。

所以你所做的就是将复杂的视图逻辑绘制到图像上下文中,并将图像传递给主线程以显示在图像视图中。

希望这可以帮助!

辅助线程上的UI更改将导致应用程序崩溃。 所以总是在主线程上进行UI更改。

 [self performSelectorOnMainThread:@selector(makeUIChanges:) withObject:nil waitUntilDone:YES];