可以将块用作iOS中notFoundMarker的值吗?

时间:2012-02-07 13:17:18

标签: objective-c ios nsdictionary

NSDictionary具有以下方法签名:

- (NSArray *)objectsForKeys:(NSArray *)keys notFoundMarker:(id)anObject;

我的问题:

  1. 对于notFoundMarker使用是否合理默认值?
  2. 是否可以将密钥(未找到任何值)作为notFoundMarker本身返回?如果键和值是不同的对象类型,并且让人知道仍然缺少什么,这将非常有用。
  3. 可以将一个块用作notFoundMarker的值,它会实际运行吗?或者只是返回块的stack-allocated-address?
  4. 尝试使用notFoundMarker
  5. 的值时,有什么非常糟糕的事情

1 个答案:

答案 0 :(得分:3)

  1. 正如下面的评论所指出,您应该使用[NSNull null]

  2. 可能没有编写自己的包装器方法或某种类别来执行此操作。也就是说,如果您只是想知道找不到哪个密钥,您只需查看传入的密钥数组,因为索引将匹配。

  3. 你当然可以使用一个块。我不认为它会被运行。这应该很容易测试(只需定义一个块,将一些东西记录到控制台并尝试它)。

  4. 这实际上取决于上下文以及您对返回的数组所做的操作。放入数组并返回没有什么本质上是坏的,但是我会质疑决定使用任何与你希望为 的键返回的对象类型不匹配的东西>在NSDictionary中找到。

  5. 编辑: 事实上,你可能可以实现你想要的2.像这样:

      NSMutableArray *objects = [myDictionary objectsForKeys:myKeys notfoundMarker:[NSNull null]];
      for (int ii = 0; ii < [objects count]; ii++ ) {
          if ([objects objectAtIndex:ii] == [NSNull null]) {
              [objects insertObject:[myKeys objectAtIndex:ii] atIndex:ii];
          }
      }