我经常发现自己实现了在循环中创建一堆对象并在非可变数组中返回它们的方法。 我通常写这样的东西:
- (NSArray *)myObjects {
NSMutableArray *_temporaryArray = [NSMutableArray array];
for (id foo in foos) {
// ...
// create `myObject` from the information in `foo`
// ...
[_temporaryArray addObject:myObject];
}
return [NSArray arrayWithArray:_temporaryArray];
}
不知何故,这种模式感觉不是很优雅(创建一个临时的可变实例似乎是一种开销)。 所以现在我正在寻找更好的实现,具体取决于用例。
这些案例的最佳实施方案是什么:
答案 0 :(得分:3)
NSMutableArray
是NSArray
的子类,所以这样就可以了:
return _temporaryArray;
(我会避免_
前缀,因为它通常用于表示实例变量,而不是auto
变量。)
这似乎符合您的标准:
但请注意,从理论上讲,调用者可以将NSArray
强制转换回NSMutableArray
并开始修改对象,但是您应该担心这一点。
答案 1 :(得分:0)
只是一个小问题:
NSMutableArray *temporaryArray = [NSMutableArray alloc] initWithCapacity:[foos count]];
虽然运行时只会将容量作为咨询号码,而不是创建一个完全相同的大小。