NSNumber 与 Int

发布于 2024-11-19 09:06:51 字数 102 浏览 2 评论 0原文

如果整数无法写入字典然后写入 .plist,但 NSNumbers 可以,那么在整个应用程序中使用 NSNumbers 是否更好,而不是每次从 .plist 保存或加载字典时都需要进行转换?

If integers cannot be written to a dictionary and then to a .plist, but NSNumbers can is it better to use NSNumbers throughout the app, rather than needing to convert every-time saving or loading a dictionary from a .plist?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

情域 2024-11-26 09:06:51

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

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


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

As a generalization: Just stick with POD types until you need to use an object based representation, such as NSNumber. The performance is much better with the PODs, but you'll need NSNumber in some cases.

In some cases, it may make sense to use NSNumber instead -- this is typically when you reuse a NSNumber often -- this is to avoid making a ton of duplicate NSNumbers. Such occurrences are practical only rarely beyond serialization and generic objc interfaces (bindings, transformers, dictionaries).


Update/Details: The ObjC runtime will in some cases, on some architectures, and on some OS versions substitute a tagged pointer representing NSNumbers of specific type and domain. Although the internal representation has changed since originally written a few years back, here is a good introduction to the subject: http://objectivistc.tumblr.com/post/7872364181/tagged-pointers-and-fast-pathed-cfnumber-integers-in. Where this can be used, it saves you from slow operations like allocations, locking, and ref count ops. Nevertheless, tagged pointers are incapable of representing every number and it introduces overhead, so you should still favor basic builtins over NSNumber as a default. Tagged pointers are a great optimization where applicable, but are far from competing with the builtins when you just need a number.

倦话 2024-11-26 09:06:51

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

int 不是对象。

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

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

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

NSNumber is object inherited from NSValue wrapper object.

int is not object.

if use NSNumber u can get more and more function to utilize with them.

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

NSNumber is a class that helps you to store numeric types as object. It has methods to convert between different types and methods to retrieve a string representation of your numeric value.
If you use a variable day of type NSNumber* the way you did in your example, you are not modifying the value of day but its memory address.

你的呼吸 2024-11-26 09:06:51

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

例如,如果您使用UISegmentedControl,并且想要选择一个段,那么,

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

It all depends on your need. But, if the API requires you to use int, you should use int. It it asks you to use NSNumber you should use NSNumber.

For example, if you are using a UISegmentedControl, and you want to select a segment, then,

[segmentedControl setSelectedSegmentIndex:aIntVar]; // Can not use NSNumber here
// or
[segmentedControl setSelectedSegmentIndex:[aNumber intValue]];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文