请看以下两个陈述:
NSMutableIndexSet *selectedRows = [[[NSMutableIndexSet alloc] initWithIndexSet:[_dataTableView selectedRowIndexes]] autorelease];
NSMutableIndexSet *rowsToDelete = [[selectedRows copy] autorelease];
我希望rowsToDelete是NSMutableIndexSet,但是它的NSIndexSet。看起来像NSMutableIndexSet中没有实现复制。 如果是这样的话,即使是这样的基本类型,也不是很难实现复制吗?或者我缺少一些对IndexSet接口有基本的东西?
答案 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)
您可能会对copy
和mutableCopy
之间的区别感到困惑。
copy
返回copyWithZone:
返回的对象。如果类具有不可变和可变的变体,那么反过来将返回不可变的变体。
请参阅the documentation for copyWithZone:
中的讨论:
如果考虑“immutable vs. mutable”适用于接收对象,则返回的副本是不可变的;否则副本的确切性质由班级决定。