gpt4 book ai didi

objective-c - 是否有任何理由使用 NSInteger 而不是 uint8_t 和 NS_ENUM ?

转载 作者:行者123 更新时间:2023-12-03 16:30:45 24 4
gpt4 key购买 nike

通用标准似乎使用 NS_ENUMNSInteger 作为基本类型。为什么会这样呢?假设少于 256 个案例(几乎涵盖所有枚举),是否有任何理由使用它来代替 uint8_t,因为它可以使用更少的内存空间?要么导入到 Swift 中就可以了。

这与 NS_OPTIONS 不同,在 NS_OPTIONS 中,较大的类型是有意义的,因为您不应该使用枚举进行任何位数学计算,并且可以使用基本类型表示的每个数字作为值.

最佳答案

标题问题的答案:

Is there any reason to use NSInteger instead of uint8_t with NS_ENUM?

可能不是。

在 C 中声明枚举时,如果未指定基础类型,编译器可以自由地从 char 以及至少可以的有符号和无符号整数类型中选择任何合适的类型> 代表所需的所有值。当前的 Xcode/Clang 编译器选择 4 字节整数。人们可以合理地假设编译器编写者做出了明智的选择 - 性能和存储之间的某种平衡。

较小的类型,例如uint8_t,通常会在内存(或磁盘)中较小的边界上对齐 - 但这只有在相邻字段与对齐方式匹配时才有用,例如如果 2 字节大小的类型化字段跟在 1 字节大小的类型化字段后面,则除非另有指定(例如使用 #pragma Packed),否则可能会有一个中间未使用的字节。

任何性能或存储差异是否显着将在很大程度上取决于应用程序。遵循通常的经验法则 - 在发现问题之前不要进行优化。

但是,如果您发现限制大小在语义上有好处,那么一定要这样做 - 没有一般理由您不应该这么做。这种选择类似于选择有符号整数与无符号整数,一些程序员避免使用 ≥ 0 的值的无符号类型,除非绝对需要额外的范围,而其他程序员则欣赏语义上的好处。

总结:没有正确的答案,这很大程度上是一个主观问题。

HTH

关于objective-c - 是否有任何理由使用 NSInteger 而不是 uint8_t 和 NS_ENUM ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37076427/

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