【问题标题】:Efficiency NSString vs NSInteger/int - only for textual representation效率 NSString 与 NSInteger/int - 仅用于文本表示
【发布时间】:2014-07-13 10:34:18
【问题描述】:

我想知道转换/转换从 csv 文件解析的数字是否有意义,例如客户 ID,到 NSString? 或者也许更好一个简单的int?由于我对 obj-c 还很陌生,我不太确定,是始终使用 NSxyz 类型,还是使用我习惯使用的来自 Java/C/C++ 的类型。

实际上,该值仅存储在一个变量中,然后加载到一些文本字段中(这又意味着转换回 NSString 我猜?)。

使用更少的内存会有什么好处吗?假设 id 有 6 位数字,解析大约 10'000-100'000 个客户。同样适用于较小的数字,例如地址门牌号。

【问题讨论】:

  • ID 不是数字。它们碰巧是数字,但它们是字符串。将它们保留为字符串。

标签: ios objective-c memory-management nsstring nsinteger


【解决方案1】:

string1 letter == 1 byte,所以如果你有6个数字,你就占据了6 bytes

int 通常采用 2 (short), 3 or 4 (long) bytes。它也可以通过int_64 到达8 bytes。但是,您会受到限制,因为例如在 2 字节情况(16 位)中,您可以考虑 2^16 个数字。

在您的情况下,您可以使用int,但我会使用NSString,也是因为您需要在textfield 中使用它。

NSIntegerintNSUIntegerunsigned int

NSNumber 是一个对象(因此没有原语),它可以存储 intfloatdoubleboolean。所以你可以在这种类型的变量中存储多种类型的原语,然后使用适当的:

[number floatValue];
[number boolValue];
...

【讨论】:

  • "1 letter = 1 byte" 仅适用于某些编码中的某些字母。
  • 当然。但我们处于超级基础模式。你没看见吗? :) 而且最好说:对于某些编码中的某些字母不正确。
  • 好的,然后会坚持使用 NSStrings。并感谢“超级基础模式”,让我笑了哈哈:)
  • 1 个字母不一定占 1 个字节。这取决于编码、组成和表示的字符。
  • NSString 中的一个字母通常是 1,有时是 2 个字节。然而,一个 NSString 对象本身就使用了大量的内存。 NSString* 单独使用与 NSInteger 一样多的内存。
猜你喜欢
  • 2012-10-19
  • 2010-12-28
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多