【问题标题】:Adding subview, gets delayed?添加子视图,延迟?
【发布时间】:2011-01-25 08:47:49
【问题描述】:

我真的不知道如何为这个问题命名,但有一件事情真的让我很生气: 在我的应用程序中,我有一个 UITableView、UISegmentedControl 和 UINavigationBar。一旦 UISegmentedControl 选择了它的一个段,我想在 UINavigationBar 上显示一个 UIActivityIndi​​catorView,然后解析一个 xml 文件并将结果显示在一个表中。 一切都按我的意愿工作,除了一件事,活动指示器视图在解析器完成后被添加到 uinavigationbar,即使在解析器初始化之前将 UIIndicatorView 添加到 UINavigationBar 的方法 showLoading 也是如此。 谁能解释一下?有什么我可能会丢失的吗?也许用户界面需要重绘? 谢谢 彼得

【问题讨论】:

    标签: iphone iphone-sdk-3.0 uinavigationcontroller uiactivityindicatorview


    【解决方案1】:

    看起来您在主线程中解析了您的 xml,因此它因 UI 更改而被阻止。尝试将 xml 解析移动到单独的线程(例如,通过 -performSelectorInBackground: 调用您的解析方法)

    编辑:实际上,您(几乎可以肯定)在您的应用程序中隐式使用autorelease - 因为许多标准函数返回自动释放的对象。当您在单独的线程上运行函数时,您需要在那里创建 NSAutoreleasePool 对象来处理自动释放的对象并避免内存泄漏(请参阅文档中的 Autorelease Pools)。因此,您的 parseXML 函数必须如下所示:

    - (void)parseXML{
       NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
       ... //xml parsing routines etc
       [pool release];
    }
    

    【讨论】:

    • 嗨!非常感谢您的回答,但是现在当我尝试使用 performSelectorInBackground 进行解析时,我得到了一堆 NSAutoreleaseNoPool 错误,即使我在应用程序中根本没有使用 autorelease。
    • 您好,实际上由于一些奇怪的原因,这些错误也与主视图的一些 UI 元素有关(作为参考,我在另一个类中调用了解析器)。问候
    • 它们是什么类型的错误?如果活动指示器和内存泄漏的问题得到解决,是否最好在单独的问题中询问它们?
    • 这是关于泄漏的错误,但它们解决了具有解析 xml 的对象的类的一些 UI 元素
    猜你喜欢
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多