【发布时间】:2023-03-30 17:10:01
【问题描述】:
我试图了解在为 32 位和 64 位架构开发时会如何影响开发。根据我迄今为止的研究,我了解int 始终为 4 字节,无论运行应用程序的设备的架构如何。但是NSInteger 在 32 位设备上是 4 个字节,在 64 位设备上是 8 个字节。我得到的印象是NSInteger 是“更安全”并被推荐的,但我不确定这样做的原因是什么。
我的问题是,如果您知道您使用的可能值永远不会很大(也许您正在使用它来索引包含 200 个项目的数组或将对象的数量存储在数组中),为什么将其定义为NSInteger?当你不会全部使用它时,它只会占用 8 个字节。在这些情况下将其定义为int 会更好吗?如果是这样,在什么情况下您想使用NSInteger(而不是int 或long 等)?显然,如果您需要使用更大的数字,您可以使用 64 位架构。但是,如果您需要它也可以在 32 位设备上工作,您会不会使用 long long,因为它在 32 位设备上也是 8 个字节?我不明白为什么有人会使用NSInteger,至少在创建在这两种架构上运行的应用程序时是这样。
此外,我想不出一种方法可以接收或返回原始类型 - int,而是使用 NSInteger,我想知道它是否不仅仅是值的大小。例如,(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section。我想了解为什么会这样。假设可能有一个包含 2,147,483,647 行的表,那么当您再添加一个时,在 32 位设备上会发生什么 - 它会环绕到 -2,147,483,647 吗?在 64 位设备上,它将是 2,147,483,648。 (为什么要返回一个有符号的值?我认为它应该是无符号的,因为你不能有负数的行。)
最后,我想更好地了解这些数字数据类型的实际使用,也许一些代码示例会很棒!
【问题讨论】:
-
@Joey:你得到“正确”的答案了吗?我在答案中找不到你问的。
标签: ios objective-c 64-bit 32bit-64bit nsinteger