应用程序在 32 位设备上的功能不同 - NSInteger 与 intValue
App not functioning the same on 32 bit devices - NSInteger vs intValue
我注意到在将实例化到内存中的数组数量从 8 个增加到 23 个之后,我的应用程序就停止了 运行ning
[NSMutableArray addObject:obj]
仅在 32 位设备上的第 13 个阵列上。在 iPad Air 2(设备和 sim 卡)和 iPhone 6(设备和 sim 卡)上,所有 23 个数组都已填充,应用程序按预期运行。
我知道设备有时会 运行 可用内存不足,我注意到 Xcode 在 32 位设备上,应用程序内存徘徊在 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 is an NSInteger
那为什么这有什么不同呢?更重要的是,如果它不是 intValue,为什么这种差异足以阻止线程在循环内处理这些条件?这些是这个问题的一些未回答的部分,但是上面的解决方案早就解决了。
我注意到在将实例化到内存中的数组数量从 8 个增加到 23 个之后,我的应用程序就停止了 运行ning
[NSMutableArray addObject:obj]
仅在 32 位设备上的第 13 个阵列上。在 iPad Air 2(设备和 sim 卡)和 iPhone 6(设备和 sim 卡)上,所有 23 个数组都已填充,应用程序按预期运行。
我知道设备有时会 运行 可用内存不足,我注意到 Xcode 在 32 位设备上,应用程序内存徘徊在 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 is an NSInteger
那为什么这有什么不同呢?更重要的是,如果它不是 intValue,为什么这种差异足以阻止线程在循环内处理这些条件?这些是这个问题的一些未回答的部分,但是上面的解决方案早就解决了。