Iphone 在后台线程上构建UIView
我知道UI应该只在主线程上更新,但是如果不将子视图添加到可见视图中,是否可以在单独的线程上创建和添加子视图?它会导致内存和性能问题吗?下面是一些示例代码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
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实际上不知道这是否被明确禁止。但我想我的问题是为什么?如果绘图是您的瓶颈,即使您能够在后台线程上构建视图层次结构,当您将其添加到可见层次结构时,它仍然会在主线程上绘制。如果为了创建视图而进行的一些计算是瓶颈,在后台进行这些计算,并将结果传递给主线程,然后在那里构建视图层次结构。