我真的不知道如何为这个问题命名,但有一件事情真的让我很生气:在我的应用程序中,我有一个 UITableView、UISegmentedControl 和 UINavigationBar。一旦 UISegmentedControl 选择了它的一个段,我想在 UINavigationBar 上显示一个 UIActivityIndicatorView,然后解析一个 xml 文件并将结果显示在一个表中。一切都按我的意愿工作,除了一件事,活动指示器视图在解析器完成后被添加到 uinavigationbar,即使在解析器初始化之前将 UIIndicatorView 添加到 UINavigationBar 的方法 showLoading 也是如此。谁能解释一下?有什么我可能会丢失的吗?也许用户界面需要重绘?谢谢彼得
问问题
354 次
1 回答
0
看起来您在主线程中解析了您的 xml,因此它因 UI 更改而被阻止。尝试将 xml 解析移动到单独的线程(例如,通过调用您的解析方法-performSelectorInBackground:
)
编辑:实际上你(几乎可以肯定)autorelease
在你的应用程序中隐式使用 - 因为许多标准函数返回自动释放的对象。当您在单独的线程上运行函数时,您需要在NSAutoreleasePool
那里创建对象来处理自动释放的对象并避免内存泄漏(请参阅文档中的自动释放池)。因此,您的 parseXML 函数必须如下所示:
- (void)parseXML{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
... //xml parsing routines etc
[pool release];
}
于 2010-03-09T09:58:31.727 回答