NSNumber vs Int

时间:2011-07-12 10:24:45

标签: iphone objective-c ios plist nsnumber

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

3 个答案:

答案 0 :(得分:8)

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

在某些情况下,使用NSNumber代替可能是有意义的 - 这通常是在经常重复使用 NSNumber时 - 这是为了避免赚钱重复NSNumber个。除了序列化和通用objc接口(绑定,变换器,字典)之外,这种情况很少发生。


更新/详细信息: ObjC运行时在某些情况下,在某些体系结构上,在某些操作系统版本上替换代表NSNumber s的标记指针特定类型和域名。虽然自几年前最初写的内部表示发生了变化,但这里有一个很好的介绍:http://objectivistc.tumblr.com/post/7872364181/tagged-pointers-and-fast-pathed-cfnumber-integers-in。如果可以使用它,它可以避免像分配,锁定和引用计数操作等慢速操作。尽管如此,标记指针无法表示每个数字并且会引入开销,因此您仍然应该优先使用NSNumber上的基本内置函数作为默认值。标记指针在适用的情况下是一个很好的优化,但是当您只需要一个数字时,它远不会与内置竞争对手竞争。

答案 1 :(得分:0)

NSNumber是从NSValue包装器对象继承的对象。

int不是对象。

如果使用NSNumber你可以获得越来越多的功能来使用它们。

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

NSNumber是一个帮助您将数字类型存储为对象的类。它具有在不同类型和方法之间进行转换的方法,以检索数值的字符串表示形式。 如果您使用类型NSNumber *的变量日,就像您在示例中所做的那样,您不会修改day的值,而是修改其内存地址。

答案 2 :(得分:0)

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

例如,如果您使用的是 UISegmentedControl ,并且想要选择一个细分,那么,

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