2

我想保存一个 NSIndexPath 对象的副本以供以后使用。然后,我想覆盖原来的对象。由于copy只增加对象的保留计数,如何制作原始索引路径的深层副本?

...
NSIndexPath *originalIndexPath = [tappedIndexPath copy]; // need to make a deep copy here
tappedIndexPath = ...;
...
// need the original index path here
4

2 回答 2

2

无论如何NSIndexPath,它是不可变的,副本是深还是浅都没有关系。事实上,深拷贝会浪费内存。

关于您的示例:对于您想要做的事情,您根本不需要复制索引路径。当您将另一个索引路径对象分配给tappedIndexPath(在第二行中)时,这根本不会影响originalIndexPath。在您的代码段末尾,originalIndexPath仍将指向与以前完全相同的对象。

于 2012-05-19T14:24:53.133 回答
0

你的问题不是很清楚。如果您需要将其保存以供以后在另一个课程中使用,您应该尝试以下两种方法。

您不能直接将 NSIndexPath 保存在 NSUserDefaults 中。但是,您可以使用 NSKeyedArchive 和 NSKeyedUnarchiver 来帮助您执行此操作。

http://gordiychuk.co.uk/2012/02/10/how-to-save-nsindexpath-to-nsuserdefaults/

我不确定您对 NSIndexPath 到底需要什么。我这样做了,我只是在创建 UIViewController 时通过 init 方法传递了 NSIndexPath。我需要知道用户在另一个类中选择了哪一行。

例如:

- (id)initWithNibName:(NSString *)nibNameOrNil 
               bundle:(NSBundle *)nibBundleOrNil 
   initWithNSIdexPath:(NSIndexPath *)indexPath
{
    // Do something indexPath
}
于 2012-05-19T14:29:40.403 回答