如果整数无法写入字典再到.plist,但NSNumbers可以写入,那么在整个应用程序中都使用NSNumbers是否比需要在保存或加载字典时每次进行转换更好?
如果整数无法写入字典再到.plist,但NSNumbers可以写入,那么在整个应用程序中都使用NSNumbers是否比需要在保存或加载字典时每次进行转换更好?
NSNumber
的标记指针。虽然内部表示方式自几年前撰写以来已经改变,但这里有一个关于该主题的良好介绍:http://objectivistc.tumblr.com/post/7872364181/tagged-pointers-and-fast-pathed-cfnumber-integers-in。在适用的情况下,它可以避免像分配、锁定和引用计数操作这样的缓慢操作。然而,标记指针无法表示每个数字,并且会引入额外开销,因此您仍应将基本内置函数视为默认值,而不是NSNumber
。标记指针是一种很好的优化方法,但当您只需要一个数字时,它远远不能与内置函数竞争。
这完全取决于你的需求。但是,如果 API 要求你使用 int,那么你应该使用 int。如果它要求你使用 NSNumber,那么你就应该使用 NSNumber。
例如,如果你正在使用 UISegmentedControl,并且想要选择一个片段,那么,
[segmentedControl setSelectedSegmentIndex:aIntVar]; // Can not use NSNumber here
// or
[segmentedControl setSelectedSegmentIndex:[aNumber intValue]];
NSNumber是继承自NSValue包装对象的对象。
int不是对象。
如果使用NSNumber,您可以获得更多的功能来利用它们。
NSNumber是一个类,可以帮助你将数字类型存储为对象。它具有在不同类型之间转换的方法以及检索数值字符串表示的方法。 如果您像在示例中一样使用类型为NSNumber*的变量day,那么您修改的并非day的值而是它的内存地址。
NSInteger
而不是int
。这可以在各个版本的OS X中更好地实现可移植性。 - mouvicielNSNumber
(一个对象)替换一个int
(一个“标量值”)。将每个数字数量都保留在NSNumber
中并为每个计算转换会非常笨拙。另一方面,使用NSInteger
而不是int
是一个合理的做法。 - Hot Licks