2009-05-25 129 views

回答

3

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

也许你可以实现你自己的子视图重用系统来节省你所有的分配时间。再次,请仔细阅读UITableView是如何做到的,并将其建模。不幸的是,真的没有比我想象的更简单的解决方案。

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]; 
} 

每个线程应该有一个autorelease池。

一个提示;如果您的子视图需要动画,请尝试声明UIAnimation

相关问题