【问题标题】:Is [NSMutableIndexSet copy] behavior incorrect?[NSMutableIndexSet copy] 行为不正确吗?
【发布时间】:2013-06-03 11:11:45
【问题描述】:

看下面两条语句:

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

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

【问题讨论】:

    标签: objective-c nsmutableset


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      是的,行为是正确的。

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

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

      查看the documentation for copyWithZone:中的讨论

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

      【讨论】:

      • 我没听懂。这里的接收对象和源都是 NSMutableIndexSet。
      • 感谢您的链接。这是我面临的同样问题
      • @NiteshChordiya 复制方法不知道它是如何被接收的。如果你想要一个可变副本,那么你应该使用mutableCopy
      猜你喜欢
      • 1970-01-01
      • 2021-01-25
      • 2023-03-30
      • 1970-01-01
      • 2019-08-23
      • 2016-05-06
      • 1970-01-01
      • 2012-12-21
      • 2021-04-25
      相关资源
      最近更新 更多