NSNumber vs Int

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

作为一个泛化:只需坚持使用PODtypes,直到需要使用基于对象的表示forms(如NSNumber 。 POD的性能要好得多,但在某些情况下需要NSNumber

在某些情况下,使用NSNumber代替它是有意义的 – 这通常是在你经常重用一个NSNumber时候 – 这是为了避免产生大量重复的NSNumber 。 除了序列化和通用objc接口(绑定,变换器,字典)之外,这种情况很less见。


更新/详细信息:在某些情况下,ObjC运行时会在某些体系结构上,以及某些操作系统版本上replace表示特定types和域的NSNumber标记指针 。 虽然内部表示自从几年前的写作以来已经发生了变化,但这里有一个很好的介绍: http : //objectivistc.tumblr.com/post/7872364181/tagged-pointers-and-fast-pathed-cfnumber-integers在 。 在可以使用的地方,它可以使您免于分配,locking和参考计数等操作。 不过,带标签的指针不能代表每一个数字,并且会引入开销,所以你仍然应该把默认的NSNumber基本内buildNSNumber作为默认值。 标记的指针在适用的地方是一个很好的优化,但是当你只需要一个数字的时候,与指针指向的内核相距甚远。

NSNumber是从NSValue包装器对象inheritance的对象。

int不是对象。

如果使用NSNumber你可以得到越来越多的function与他们利用。

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

NSNumber是一个类,可以帮助您将数字types存储为对象。 它有方法之间转换不同的types和方法来检索您的数值的string表示。 如果您在您的示例中使用types为NSNumber *的variablesdate,则不会修改date的值,而是修改其内存地址。

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

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

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