【问题标题】:What's the result of passing just nil to arrayWithArray:?将 nil 传递给 arrayWithArray: 的结果是什么?
【发布时间】:2012-05-22 22:19:28
【问题描述】:

当您将nil 传递给arrayWithArray: 时会发生什么?

假设我有以下代码:

NSMutableArray *myArray = [NSMutableArray arrayWithArray:someOtherArray];

如果someOtherArray 恰好是nil,那么myArraynil 还是一个空的可变数组?

【问题讨论】:

  • 你尝试的时候发生了什么?
  • 正如@JacquesCousteau 所问:NSLog(@"%@", [NSMutableArray arrayWithArray:nil]);
  • 如果一个新的数组没有被返回,那就太出乎意料了...
  • @JacquesCousteau 我没有尝试过,因此我说我正在寻找一个快速的答案。
  • @JacquesCousteau 我正在通过 Crucible 进行代码审查,并且没有设置我的开发环境,API 文档也没有提供我正在寻找的信息。通常我不会问这么简单的问题,但我需要一个快速的答案。

标签: objective-c cocoa nsmutablearray nsarray


【解决方案1】:

返回一个空数组。

+arrayWithArray: 的示例实现如下:

+(id) arrayWithArray:(NSArray *) arr
{
    NSMutableArray *returnValue = [NSMutableArray new];
    returnValue->objectsCount = [arr count];
    returnValue->objectsPtr = malloc(sizeof(id) * returnValue->objectsCount);
    [arr getObjects:returnValue->objectsPtr range:NSMakeRange(0, returnValue->objectsCount)];
    return returnValue;
}

因此,如果arr 为空,-count 返回 0,malloc'd 没有任何内容,并且没有任何内容被复制,因为发送到 nil 对象的消息返回该类型的默认返回值,并且确实没有别的。

【讨论】:

  • 感谢您的详细解答。
  • 我期待的是 nil 而不是空数组。我确信文档会解释它,但我只是假设。好,我决定在拉头发之前检查一下!
  • 你不应该再指望它了,因为方法参数是隐含的非空值。静态分析器现在会发出警告。
猜你喜欢
  • 2017-11-26
  • 2012-04-04
  • 2019-10-04
  • 2021-07-12
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多