【问题标题】:Is it possible to have 2 different NSNumber objects with the same value?是否可以有 2 个具有相同值的不同 NSNumber 对象?
【发布时间】:2011-09-14 13:52:48
【问题描述】:

我想要一个列表或集合,其中可能包含两个具有相同整数值的 NSNumber,但似乎内存已优化,因此它们是同一个对象。
例如

NSNumber* n1=[NSNumber numberWithInt:10];
NSNumber* n2=[NSNumber numberWithInt:10];

那么 n1==n2;

有没有办法让 n1!=n2 ?

【问题讨论】:

  • 你为什么要这个?换句话说:你有什么问题需要解决?
  • 我支持 DarkDust。在将它们添加到 NSArray 或 NSSet 时,n1==n2 没有区别;在这两种情况下它都会做“正确”的事情。
  • @Stephen 这是正确的吗?难道 NSArray 没有一个规则,如果一个对象已经存在于数组中(或者另一个对 isEqual 响应 YES 的对象),它就什么都不做?
  • @Javier 我认为没有这样的规则。我没有测试过,但是不允许重复的 NSArray 不会和 NSSet 一样吗?

标签: objective-c cocoa


【解决方案1】:

不是真的。 Cocoa 保留了一个小数字的缓存(IIRC 那些表示 0 到 12 的整数),tagged pointers 也会阻止这种情况。

如果你真的需要,一个选择是创建一个包含NSNumber 实例的类。这样你就可以保证你的类的不同实例有不同的地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    相关资源
    最近更新 更多