2

我正在尝试实时动态地将子视图添加到 UiScorllView (以节省内存)。

这样做会导致滚动视图暂停一秒钟......解决这个问题的方法是什么?

任何提示表示赞赏

4

2 回答 2

3

阅读如何UITableView解决这个问题。您在这里最大的性能打击是子视图的分配和初始绘制,但主要是分配。UITableViews 使用重用标识符和内存堆在滚动期间将其所有单元格保留在内存中,因此它可以仅重用已分配的单元格,而不是每次新单元格滚动到可视区域时重新分配新单元格。

也许您可以实现自己的子视图重用系统来节省所有分配时间。再次,详细阅读它是如何UITableView做到的,并以此为基础建立模型。不幸的是,真的没有比我能想到的更简单的解决方案了。

于 2009-05-25T19:16:58.613 回答
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

于 2009-05-25T19:17:32.917 回答