>它也不会破坏对预期NSArray的情况的支持(因为它是一个子类).
>它也不会通过揭示可变的内部结构来打破封装.
在前提条件下,它永远不会是一个可变的ivar返回,(无论如何应该是常识)
我现在只能想到使用第二个的优点.
>它实际上是可变的.静音在这里是安全的,为什么要防止呢?
>无需调用[[[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 ……它的交易基本相同.
解决方法 我认为第一种变异是首选,因为多态性是首选.在任何一种情况下,两个方法都返回一个NSMutableArray实例,唯一的区别是第一个隐藏了来自调用者的事实.换句话说,第一种变化并不比第二种更安全.它本质上使用多态来告诉调用者可能返回任何类型的NSArray.如果您需要在代码中具有这种灵活性,那么它肯定具有优势. (例如,如果有一天,无论出于何种原因,您需要返回一个自定义的NSArray子类,您的代码将不会在该级别中断).
但是,您似乎更喜欢将意图传递给调用者 – 即您实际返回可变数组 – 这也没关系.为了让每个人都高兴(如果有这样的事情……),我建议将第二种方法重命名为:
- (NSMutableArray *)mutableFoobar { NSMutableArray *fooArray = [NSMutableArray array]; //populate fooArray return fooArray;}
作为旁注,我认为以下是将现有的不可变数组转换为可变数组的稍微有效的方法:
NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:fooArray];
(如果我在这个假设上错了,请纠正我).
我希望这回答了你的问题…
总结以上是内存溢出为你收集整理的objective-c – 返回mutable与返回不可变(非成员)对象全部内容,希望文章能够帮你解决objective-c – 返回mutable与返回不可变(非成员)对象所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)