gpt4 book ai didi

iphone - NSNumber,使用和存储不同基元类型时要注意什么

转载 作者:行者123 更新时间:2023-12-03 17:12:42 36 4
gpt4 key购买 nike

一个 NSNumber 可以存储不同的基本类型,如short、int、long、long long、float、double

但是当我这样做时,尺寸会改变

@(long long)

相比

@(int)

通过对CoreData模型进行建模,我使用了Integer16、Integer32、Integer64,但是它对数据库的大小有影响吗?因为都是NSNumber?

到 CoreData 属性,该属性在模型中定义了 Integer16

long long tmp = 83324;
NSNumber * numberStoringLongLong = @(tmp);
cdEntity.propertyInteger16 = numberStoringLongLong;

long long tmp2 = [cdEntity.propertyInteger16 longLongValue];

propertyInteger16 的行为正确吗? tmp2 有效吗?

最佳答案

您的第一个示例将无法按预期工作。即使 NSNumber 可以存储短整型、长整型和长整型,核心数据也会动态地为以下属性创建自定义访问器:取决于您如何在核心数据模型中定义类型。

使用“Integer 16/32/64”属性进行的快速测试显示了该行为:

NSNumber *n = @(0x11223344556677);
[cdEntity setValue:n forKey:@"i16"];
[cdEntity setValue:n forKey:@"i32"];
[cdEntity setValue:n forKey:@"i64"];
NSLog(@"%@", cdEntity);

输出:

<NSManagedObject: 0x7491030> (entity: Entity; id: 0x7491090 <x-coredata:///Entity/t4521AA03-435E-4683-9EAF-ED6EED5A5E6A2> ; data: {
i16 = 26231;
i32 = 1146447479;
i64 = 4822678189205111;
})

如您所见,存储不适合声明大小的整数属性属性的值会(默默地)截断该值。

因此,在您的示例中,将 83324 = 0x1457C 存储在整数 16 属性中将将该值截断为 17788 = 0x457C,这就是您将得到的结果,即使您使用longLongValue

关于iphone - NSNumber,使用和存储不同基元类型时要注意什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17107787/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com