NSValue getValue:方法 returns iPhone 6 上的垃圾值,但 iPhone 5 上的正确值

NSValue getValue: method returns garbage value on iPhone 6 but correct value on iPhone 5

我在 NSValue 中存储了一个 NSInteger 并且在检索值时我得到了一个垃圾值。有趣的是,我在 iPhone 6 上得到了这个垃圾值,在 iPhone 5 上得到了正确的值。

这是我的部分代码:

NSValue *unknown = nil;

[self getValueForUnknown:&unknown];

if (unknown) {
    NSInteger unknownInt;
    [unknown getValue:&unknownInt];

    NSLog(@"%lu", (unsigned long)unknownInt);    // prints the correct value on iPhone 5 but a garbage value on iPhone 6
}

...

- (void)getValueForUnknown:(NSValue **)unknownArg {
    int x = 0;
    *unknownArg = [NSValue value:&x withObjCType:@encode(int)];
}

注意:两个设备都是运行iOS 9.3.1

我参考了 Apple Docs 以了解 NSValue 的正确用法并发现:

我试图将 int 值返回到 NSInteger 变量中,并且在将 unknownInt 声明为 int 之后,现在一切正常。