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
之后,现在一切正常。
我在 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
之后,现在一切正常。