【问题标题】:NSMutableArray removeAllObjects issueNSMutableArray removeAllObjects 问题
【发布时间】:2009-11-09 21:44:31
【问题描述】:

这是我的场景: 我正在使用 iPhone mapkit 构建位置查找器。我在应用程序委托中存储了一个数组,用于保存有关商店位置的信息(名称、地址等)。当按下某个按钮时,会滑入一个带有文本字段和一个按钮的视图,该按钮执行用户输入的查找,并返回所有必要的信息。

所有这些都可以正常工作,并且点会被绘制到地图上。但是,如果我再次尝试进行搜索,应用程序就会崩溃。当 xml 解析器开始时,我试图从数组中删除所有对象:

- (void)parserDidStartDocument:(NSXMLParser *)parser {
    [dataTempForSearch removeAllObjects];
}

调试器只是在方法调用上放了一个箭头,没有真正解释为什么......

以前有没有人遇到过这样的情况?关于为什么这可能仅在第二次执行该操作时发生的任何想法?

【问题讨论】:

  • 如果您将此行注释掉,它会崩溃吗?如果您编写一个 for 循环来删除每个对象上的对象,怎么样?试试这些作为调试辅助工具。

标签: objective-c


【解决方案1】:

仅凭那一行代码很难判断。 这可能是一个内存管理问题,但具体我不能说。

在黑暗中拍摄: 每次进行搜索时,我都会销毁并重新创建解析器。 在将数据传递给应用程序委托后,我也会立即清除 dataTempForSearch,而不是在您进行另一次搜索时。

【讨论】:

  • 你是对的,这是一个内存管理问题。每次都是在第二个视图放dataTempForSearch,所以下次去访问的时候放出来了,编译器不知道去哪里找了……谢谢大开眼界!
【解决方案2】:

MapKit 有一些非常讨厌的问题。当您得到调试器在该行放置箭头的奇怪行为时,请查看提供给您的调用堆栈(通常可以在左侧的调试模式下看到)。我敢打赌这与 MapKit 有关。

【讨论】:

    猜你喜欢
    • 2013-01-27
    • 2013-03-23
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    相关资源
    最近更新 更多