NSMutableArray访问器返回NSArray

时间:2012-08-23 04:09:46

标签: iphone objective-c nsmutablearray

我有一个NSMutableArray

@property (copy, nonatomic) NSMutableArray *childrenArray;

现在我将它初始化为:

self.childrenArray = [NSMutableArray arrayWithArray:children];

孩子也是上面的,

现在当我从children数组中删除一个对象时,我收到了这个错误:

[__NSArrayI removeObjectAtIndex:]: unrecognized selector sent

我立即明白我的删除是在NSArray上调用的,所以我的查询是我的访问者返回NSArray的原因,因为它应该返回NSMutableArray。

谢谢,

1 个答案:

答案 0 :(得分:2)

首先,copy @property将copy字面发送给正在设置的对象。可变集合通过创建不可变副本来响应copy。可变复制充斥着边缘情况(其他SO问题已经涉及很多)。

其次,您确实确实不希望属性提供对象内可变状态的访问权限。你可能不想出售可变的集合类。


钝:

向可变集合发送copy将返回不可变副本。 copy属性不会保留可变性。

手动实现setter / getter来设置/返回可变实例可能是错误的。


这样想:

您有一个名为“Person”的类,它具有名为“firstName”的属性。如果该属性是可变的,有人可能会说:

 [[aPerson firstName] setString:@"Joe"];

即。你想让某人能够改变你的名字,而没有他们这样做的任何通知吗?可能不是。但是,通过在可变容器中公开对象的状态,完全是允许的。