Iphone 在后台线程上构建UIView

Iphone 在后台线程上构建UIView,iphone,ios,uiview,nsoperationqueue,Iphone,Ios,Uiview,Nsoperationqueue,我知道UI应该只在主线程上更新,但是如果不将子视图添加到可见视图中,是否可以在单独的线程上创建和添加子视图?它会导致内存和性能问题吗?下面是一些示例代码 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; [queue addOperationWithBlock:^{ // do some fancy calculations, building views UIView *aView = .. for

我知道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];
        }];
    }];
}];
NSOperationQueue*队列=[[NSOperationQueue alloc]init];
[队列添加操作WithBlock:^{
//做一些奇特的计算,建筑视图
UIView*aView=。。

对于(int i,i我的理解是,
CALayer
由线程不安全的内存支持。因此,您可以在背景线程上绘制,但不能渲染层或操纵视图

因此,您要做的是将复杂的视图逻辑绘制到图像上下文中,并将图像传递给要在图像视图中显示的主线程


希望这有帮助!

次线程上的UI更改将导致应用程序崩溃。所以始终在主线程上进行UI更改

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

您应该查看2012年WWDC视频“在iOS上构建并发用户界面”。因此,我可以在不添加可见视图的情况下创建UIView,甚至可以在这些视图中添加子视图……(可能在创建后将它们添加到阵列中)…然后通过数组添加到可见视图?ThanksI实际上不知道这是否被明确禁止。但我想我的问题是为什么?如果绘图是您的瓶颈,即使您能够在后台线程上构建视图层次结构,当您将其添加到可见层次结构时,它仍然会在主线程上绘制。如果为了创建视图而进行的一些计算是瓶颈,在后台进行这些计算,并将结果传递给主线程,然后在那里构建视图层次结构。