我想保存一个 NSIndexPath 对象的副本以供以后使用。然后,我想覆盖原来的对象。由于copy
只增加对象的保留计数,如何制作原始索引路径的深层副本?
...
NSIndexPath *originalIndexPath = [tappedIndexPath copy]; // need to make a deep copy here
tappedIndexPath = ...;
...
// need the original index path here
我想保存一个 NSIndexPath 对象的副本以供以后使用。然后,我想覆盖原来的对象。由于copy
只增加对象的保留计数,如何制作原始索引路径的深层副本?
...
NSIndexPath *originalIndexPath = [tappedIndexPath copy]; // need to make a deep copy here
tappedIndexPath = ...;
...
// need the original index path here
无论如何NSIndexPath
,它是不可变的,副本是深还是浅都没有关系。事实上,深拷贝会浪费内存。
关于您的示例:对于您想要做的事情,您根本不需要复制索引路径。当您将另一个索引路径对象分配给tappedIndexPath
(在第二行中)时,这根本不会影响originalIndexPath
。在您的代码段末尾,originalIndexPath
仍将指向与以前完全相同的对象。
你的问题不是很清楚。如果您需要将其保存以供以后在另一个课程中使用,您应该尝试以下两种方法。
您不能直接将 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
}