从不同的地方调用时,NSMutableArray返回不同的计数

时间:2015-08-18 05:56:09

标签: ios objective-c

在尝试在ios 8.4模拟器上运行项目时,我对NSMutableArray有一个非常奇怪的情况。该项目是非弧形的,并且有很多代码,但问题的摘要如下:

  • 我有一个NSMutableArray * months实例变量
  • 有一个填充此数组的方法“populate”
  • 有一个方法“monthCount”(只是[months count]的别名)

monthCount的代码:

NSLog(@"months.count = %i", [months count]);
return [months count];

这就是奇怪的地方:在“填充”方法中,我正在创建字典并将它们添加到“月”数组中。添加新对象后,我执行以下操作:

NSLog(@"count after adding: %i", [months count]);
NSLog(@"monthCount returned: %i", [self monthCount]);

出于某种原因,只有[个月计数]来自“填充”方法。 [self monthCount]始终返回“1”。这里有些陌生人: monthCount方法正确查看月数(即此函数中包含的NSLog输出正确的计数),但在我返回并打印出“populate”方法中的值后,它变为“1”。

我还使用调试器测试“populate”和“monthCount”方法实际上是否正在访问同一个数组。相同的代码也可以在我的ios7设备上运行完美(所以它可能只是一个模拟器,但我现在无法在设备上进行测试)。有没有人知道这里发生了什么?

2 个答案:

答案 0 :(得分:1)

对不起,大家好。那是一个深夜愚蠢的错误。我刚检查一下,看看是否可能将monthCount返回的内容输入到它不应该的内容中,并发现该方法的声明如下:

-(BOOL)monthCount;

我认为较旧的编译器设法使用此声明返回整数(虽然我不明白如何)。

答案 1 :(得分:0)

添加异常断点。 将MutableArray更改为普通的NSArray。 运行代码,您将获得错误(异常)索引超出范围。 找到从异常断点发生的代码和瞧。你会发现计数减少的代码!

[编辑]:根据您当前的描述,如果您的mutableArray是一个属性,那么通过添加“atomic”关键字使其成为线程安全。当控件处于该状态时,某些其他线程可能正在访问您的阵列。使其成为原子将确保数组一次被操作一个线程。