繁体   English   中英

NSNumber 与 Int

[英]NSNumber vs Int

如果整数不能写入字典然后写入 a.plist,但是 NSNumbers 可以在整个应用程序中使用 NSNumbers,而不是每次都需要转换保存或从 a.plist 加载字典,会更好吗?

作为概括:只要坚持使用 POD 类型,直到您需要使用基于 object 的表示形式,例如NSNumber POD 的性能要好得多,但在某些情况下您需要NSNumber

在某些情况下,改用NSNumber可能是有意义的——这通常是当你经常重用NSNumber时——这是为了避免产生大量重复的NSNumber 除了序列化和通用 objc 接口(绑定、转换器、字典)之外,这种情况很少发生。


更新/详细信息:在某些情况下,在某些架构和某些操作系统版本上,ObjC 运行时将替换一个表示特定类型和域的NSNumber标记指针 尽管自几年前最初编写以来内部表示已经改变,但这里是对该主题的一个很好的介绍: http://objectivistc.tumblr.com/post/7872364181/tagged-pointers-and-fast-pathed-cfnumber-integers -在 在可以使用它的地方,它可以使您免于诸如分配、锁定和引用计数操作之类的缓慢操作。 尽管如此,标记指针无法表示每个数字,并且会引入开销,因此您仍然应该优先使用基本内置函数而不是NSNumber作为默认值。 标记指针在适用的情况下是一个很好的优化,但当您只需要一个数字时,它与内置函数相去甚远。

NSNumber 是 object 继承自 NSValue 包装器 object。

int 不是 object。

如果使用 NSNumber,您可以获得越来越多的 function 与它们一起使用。

http://developer..com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html

NSNumber 是一个 class,可帮助您将数字类型存储为 object。 它具有在不同类型之间转换的方法和检索数值的字符串表示形式的方法。 如果您按照示例中的方式使用类型为 NSNumber* 的变量 day,则您不会修改 day 的值,而是修改其 memory 地址。

这一切都取决于您的需要。 但是,如果 API 要求您使用int ,您应该使用int 它要求您使用NSNumber您应该使用NSNumber

例如,如果您使用的是UISegmentedControl ,并且您想要 select 一个段,那么,

[segmentedControl setSelectedSegmentIndex:aIntVar]; // Can not use NSNumber here
// or
[segmentedControl setSelectedSegmentIndex:[aNumber intValue]];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM