0

看下面两条语句:

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

我希望 rowsToDelete 是一个 NSMutableIndexSet,但它的 NSIndexSet。看起来复制没有在 NSMutableIndexSet 中实现。如果是这样,即使对于这样的基本类型,不实现复制不是一个很大的失误吗?或者我缺少 IndexSet 接口的基本内容?

4

2 回答 2

1

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

于 2013-06-03T11:14:15.400 回答
0

是的,行为是正确的。

copy您可能对和之间的区别感到困惑mutableCopy

copy返回由 . 返回的对象copyWithZone:。如果该类同时具有不可变变体和可变变体,则反过来将返回不可变变体。

请参阅文档中讨论copyWithZone:

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

于 2013-06-03T11:14:27.200 回答