代码之家  ›  专栏  ›  技术社区  ›  tonklon

对id中的元素计数<nsfastnumeration>

  •  1
  • tonklon  · 技术社区  · 14 年前

    id<NSFastEnumeration>

    NSFastEnumeration实现的唯一方法是:

    - (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len
    

    背景:

    我想创建一个函数返回值的NSArray,我想用给定集合中的每个元素调用它。我想要一个用函数枚举集合的结果数组。

    id<NSFastEnumeration> enumeratable = someObject;
    NSMutableArray* results = [NSMutableArray arrayWithCapacity:(#Fill in count here#)];
    for (id object in enumeratable) {
        [results addObject:callFunctionOnObject(object)];
    }
    

    如您所见,我只需要该计数来优化数组初始化。我很清楚我可以 NSMutableArray* results = [NSMutableArray array]; 相反。

    1 回复  |  直到 14 年前
        1
  •  2
  •   kennytm    14 年前

    从NSFastEnumeration获取长度的唯一方法是循环遍历它。

    int count = 0;
    for (id x in enumerator)
      ++ count;
    return count;
    

    当然这意味着 enumerator 会筋疲力尽,你不能再循环了。

    而且,容量只是一个提示。设置它没有什么好处。