我几乎从未看到第二种方法被使用,我想知道为什么?
- 它不会破坏对期望
NSArray
的支持(因为它是其子类)。 - 它也不会通过揭示可变内部来破坏封装性。
在一个不返回可变实例变量的前提下,(这应该是常识)
我现在只能想到使用第二种方法的好处:
- 它实际上是可变的。在这里改变是安全的,那么为什么要阻止呢?
- 不需要调用
[[[foo fooBar] mutableCopy] autorelease]
,这样不必要地分配额外的内存和浪费时间。
以下是不同方法的变化:
- (NSArray *)fooBar {
NSMutableArray *fooArray = [NSMutableArray array];
//populate fooArray
return fooArray;
}
- (NSMutableArray *)fooBar {
NSMutableArray *fooArray = [NSMutableArray array];
//populate fooArray
return fooArray;
}
我正在寻求帮助,因为我有一堆具有相同模式的方法需要处理。而且大多数情况下返回的数组之后都会被修改(合并、编辑等)。因此,我认为返回NSMutableArrays应该完全没问题,但是似乎没有人这样做。
NSMutableArray、NSMutableSet、NSMutableDictionary...基本上都是一样的。