应用程序不能在32位设备上运行 – NSInteger vs intValue

我注意到增加从8到23实例化到内存中的数组后,我的应用程序停止运行

[NSMutableArray addObject:obj] 

仅在32位设备上的第13个arrays上。 在iPad Air 2(设备和SIM卡)和iPhone 6(设备和SIM卡)上,所有23个arrays都被填充,应用程序按预期运行。

我知道有一个设备将耗尽可用内存的一个点,我注意到在32位设备上的Xcode,应用程序内存徘徊在50-55mb左右,但该应用程序不会崩溃或发出内存警告控制台。 在64位设备或SIM上,在相同的兴趣点上,应用程序内存大约是90-95MB

1)当涉及到可以实例化的数据量时,32位设备的内存与64位设备有什么不同?

2)是否有一定数量的数组可以初始化为与内存无关的大小,考虑到我可以使用一个小对象填充23个数组中的2个,第一个将会有正确的计数和第二个(任何数组ID> 13)会是这样的0?

  if (obj.eventTypeID == [NSNumber numberWithInt:1]) {obj.color = [UIColor whiteColor];[array1 addObject:obj];} //ALL ARRAYS ALWAYS POPULATE NO MATTER THE COUNT OR SIZE BETWEEN 1 AND 13 if (obj.eventTypeID == [NSNumber numberWithInt:13]) {obj.color = [UIColor greenColor];[array13 addObject:obj];} //ALL ARRAYS ARE ALWAYS EMPTY BETWEEN 14 AND 23 if (obj.eventTypeID == [NSNumber numberWithInt:23]) {obj.color = [UIColor redColor];[array23 addObject:obj];} 

希望这足以继续下去。 请记住,该应用程序按照预期在64位,但不是在32位。

为了什么是值得的,我最终通过使用intValue来转换条件语句来解决问题…天才,我知道…

 if ([obj.eventTypeID intValue] == 1) 

虽然这解决了一个巨大的错误,但我仍然不明白为什么以另一种方式做这件事的精度是任何不同的。

obj.eventTypeID是一个NSInteger

那为什么这有什么不同? 更重要的是,为什么这种差异足够强大,足以阻止线程在循环内部处理这些条件,如果它不是intValue? 这些是这个问题的一些没有答案的部分,但是上面的解决scheme早已解决了这个问题。