[NSMutableIndexSet copy]行为是否不正确?

时间:2013-06-03 11:11:45

标签: objective-c nsmutableset

请看以下两个陈述:

NSMutableIndexSet *selectedRows = [[[NSMutableIndexSet alloc] initWithIndexSet:[_dataTableView selectedRowIndexes]] autorelease];
NSMutableIndexSet *rowsToDelete = [[selectedRows copy] autorelease];

我希望rowsToDelete是NSMutableIndexSet,但是它的NSIndexSet。看起来像NSMutableIndexSet中没有实现复制。 如果是这样的话,即使是这样的基本类型,也不是很难实现复制吗?或者我缺少一些对IndexSet接口有基本的东西?

2 个答案:

答案 0 :(得分:1)

复制返回非可变副本。如果要获取可变副本,则必须将消息“mutableCopy”发送到实现NSMutableCopying协议的类。 正如您在开发人员文档中看到的,NSMutableIndexSet符合NSMutableCopying和NSCopying协议: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableIndexSet_Class/Reference/Reference.html

答案 1 :(得分:0)

是的,行为是正确的。

您可能会对copymutableCopy之间的区别感到困惑。

copy返回copyWithZone:返回的对象。如果类具有不可变和可变的变体,那么反过来将返回不可变的变体。

请参阅the documentation for copyWithZone:中的讨论

  

如果考虑“immutable vs. mutable”适用于接收对象,则返回的副本是不可变的;否则副本的确切性质由班级决定。