我正在尝试动态地将子视图实时添加到UiScorllView(以节省内存)。
这样做会导致scrollview暂停一下......这是怎么回事?
任何提示赞赏
答案 0 :(得分:3)
了解UITableView
如何解决此问题。您最大的性能点击是子视图的分配和初始绘制,但主要是分配。 UITableView
使用重用标识符和内存堆来在滚动期间将其所有单元保留在内存中,这样它就可以重用已经分配的单元,而不是每次新单元滚动时重新分配新单元。可见区域。
也许你可以实现自己的子视图重用系统来节省你所有的分配时间。再次,具体阅读UITableView
如何做到这一点,并为此建模。不幸的是,确实没有比我能想到的更容易的解决方案。
答案 1 :(得分:2)
我建议任何可能挂起用户界面的操作都应放在一个线程中。这样,添加子视图的过程将在后台完成,而不会干扰主线程。
您可以NSThread
执行此操作,也可以实施NSOperationQueue
。
NSThread声明很简单;
[NSThread detachNewThreadSelector:@selector(myFunction:) toTarget:myObject withObject:argumentObject];
其中'myFunction'应该替换为函数的名称,'myObject'用一个对象(或者只是状态self
,如果你想让当前的类处理线程)和'argumentObject'应该是替换为您要传递的任何对象作为参数;这可能是nil
函数本身应如下所示;
-(void)myFunction {
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
// do your thing here...
[pool release];
}
每个帖子都应该有一个自动释放池。
一个提示;如果您的子视图必须设置动画,请尝试声明UIAnimation
块