应用程序在32位设备上的功能不同 - NSInteger与intValue

时间:2015-07-02 20:06:05

标签: ios iphone xcode ipad nsmutablearray

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

[NSMutableArray addObject:obj]

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

我理解设备将耗尽可用内存的点,我注意到在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位。

1 个答案:

答案 0 :(得分:0)

对于它的价值,我最终通过使用intValue来铸造条件语句来解决问题...天才,我知道......

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

虽然这解决了一个巨大的错误,但我仍然不明白为什么以另一种方式做到这一点的精确度有所不同。

  

obj.eventTypeID是一个NSInteger

那为什么这有什么不同呢?更重要的是,为什么这个差异足以阻止线程在循环中处理这些条件,如果它不是intValue?这些是这个问题的一些未解答的部分,但它早已用上述解决方案解决了。