NSMutableArray的奇怪问题 - 可能是一些内存损坏

时间:2010-03-12 05:23:17

标签: iphone

我正在尝试使用NSMutableArray更新表视图中的数据。很简单:(

发生的事情是我从NSURLConnection回调中获取数据,我将其解析并将其存储在数组中并在表视图上调用重载数据。问题是当框架回调cellForRowAtIndexPath时。数组仍然显示元素的正确计数,但我之前存储的所有字符串对象都显示为无效。

任何指针

4 个答案:

答案 0 :(得分:1)

也许你的问题类似于下面的

NSString *value = [NSString stringWithFormat:@"%@",stringFromWebService];
[arrayOfObjects addObject:value];
[value release]; // This should not be released

这可能不准确但可能类似。这里的值是从NSString的类方法获得的,NSString是一个自动释放的对象,所以如果你能看到它将被释放两次,一个是autorelease,另一个是你。

这是您需要检查的区域。

答案 1 :(得分:0)

检查您是否在NSURLConnection回调中保留NSString对象。你是自动释放它们吗?

修改

好的,忘了最后一件事。仔细检查自己,NSMutableArray会在您将对象添加到数组时自动保留这些对象。所以你不需要明确地保留它们:

  

与NSArray一样,实例   NSMutableArray保持强大   引用他们的内容。如果你   什么时候不要使用垃圾收集   你把一个对象添加到一个数组,   对象接收保留消息。什么时候   从mutable中删除一个对象   数组,它会收到一条发布消息。

因此,您需要检查您是否正在对要添加到阵列的对象执行任何其他显式发布。它们是否在其他任何地方被引用?

答案 2 :(得分:0)

问题在于您将字符串对象添加到可变数组中。那个字符串对象已经无效了。这就是您从阵列访问它们的时间,它们无效或不存在的原因。

最好的办法是检查解析过程中添加字符串对象的代码。

答案 3 :(得分:0)

您的问题可能是您没有正确启动阵列。

您是否将数组用作类的属性?

确保在加载视图时分配并启动阵列。