我正在尝试实时动态地将子视图添加到 UiScorllView (以节省内存)。
这样做会导致滚动视图暂停一秒钟......解决这个问题的方法是什么?
任何提示表示赞赏
我正在尝试实时动态地将子视图添加到 UiScorllView (以节省内存)。
这样做会导致滚动视图暂停一秒钟......解决这个问题的方法是什么?
任何提示表示赞赏
阅读如何UITableView
解决这个问题。您在这里最大的性能打击是子视图的分配和初始绘制,但主要是分配。UITableView
s 使用重用标识符和内存堆在滚动期间将其所有单元格保留在内存中,因此它可以仅重用已分配的单元格,而不是每次新单元格滚动到可视区域时重新分配新单元格。
也许您可以实现自己的子视图重用系统来节省所有分配时间。再次,详细阅读它是如何UITableView
做到的,并以此为基础建立模型。不幸的是,真的没有比我能想到的更简单的解决方案了。
我建议任何可能挂起用户界面的操作都应该放在一个线程中。这样,添加子视图的过程将在后台完成,不干扰主线程。
您可以通过这样做,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
块