【问题标题】:NSNumber=0 in mutable arrayNSNumber=0 在可变数组中
【发布时间】:2011-12-20 03:05:03
【问题描述】:

如果我将等于 0 的 NSNumber 存储在 NSMutableArray 中,是否会被解释为 nil 并导致计数方法出现问题?

【问题讨论】:

  • 你有没有想过这个问题。我知道下面的答案是正确的。但是,如果您亲眼看到了这一点,那么存储 NSNumber 然后创建一个保存该值的 NSArray 会在运行时将数组减半,这是令人难以置信的。我永远不会想到会出现这种情况,但这正是运行时所做的。
  • 下面的答案是正确的。 IDE 搞砸了,没有刷新观察值。

标签: objective-c nsmutablearray null nsnumber


【解决方案1】:

它将增加数组的计数。
[NSNumber numberWithInt:0]
是一个对象而不是 nil。

此外,您不能将 nil 添加到数组中

[mutableArray addObject:anObject];

如果 anObject 为 nil,则引发 NSInvalidArgumentException。

【讨论】:

    【解决方案2】:

    不,您必须区分对象 ID 本身和内容。设置为 0 的 NSNumber 的内容很可能为零,但该对象的 id 实际上是一个真实地址。

    例如,对象 id 0x2222 在内存中可能看起来像这样(非常简化):

               +--------+
    0x2222 --> | 0x0000 |
               +--------+
    

    您可以看到对象 id 不是零,而是一个实数值。对象的 contents 为零,但与对象 ID 无关。

    可变数组中的内容是对象的 id 值,而不是这些对象的内容。

    【讨论】:

      【解决方案3】:
      NSMutableArray *a = [NSMutableArray array];
      [a addObject:[NSNumber numberWithInt:0]];
      NSLog(@"count: %d", a.count);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-27
        • 2014-01-30
        • 1970-01-01
        相关资源
        最近更新 更多