4

我知道 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];
        }];
    }];
}];
4

2 回答 2

3

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

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

希望这可以帮助!

于 2012-08-28T11:41:11.520 回答
2

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

[self performSelectorOnMainThread:@selector(makeUIChanges:) withObject:nil waitUntilDone:YES];
于 2012-08-28T11:46:04.493 回答