我正在构建一个应用程序,而我有一个ViewController正在查看一个自定义对象,让我们将这个对象称为"CustomObject“。在按下按钮时,将触发一个segue,因此调用prepareForSegue,在其中获取目标ViewController并传递self.myObject。目标ViewController可能会更改CustomObject的几个部分,但如果用户决定返回原始ViewController,则这些更改不应反映在原始ViewController中。只有当用户按下目标ViewController中的“保存”,从而触发NSNotification时,才能反映这些更改,该CustomObject的版本应该在原始ViewController中重新加载,如下所示:
self.myObject = (CustomObject *)notification.object;因此,我的问题如下:,我应该使用哪些(或任何其他正确的)-为什么??
@property (nonatomic, strong) CustomObject *myObject;
@property (nonatomic, copy) CustomObject *myObject;谢谢!
更新:
头文件:
@interface CustomObject : NSObject <NSCopying>实施文件:
- (id)copyWithZone:(NSZone *)zone
{
id copy = [[[self class] alloc] init];
if (copy)
{
// Copy NSObject subclasses
[copy setRegisterDate:[self.registerDate copyWithZone:zone]];
}
return copy;
}发布于 2015-04-17 17:36:27
您应该使用strong但是(在prepareForSegue中)创建和传递一个副本(或者只是一个不同的对象,但无论如何,不要传递原始对象)。
这与设计copy属性的情况正好相反。有了copy属性属性,接收方希望确保对象以后不会在后台发生变异:例如,我接受NSString,但调用方传递给我一个NSMutableString,并保留它,这样现在可以在后台更改字符串。通过调用copy,我将NSMutableString转换为不可变的NSString。
正如我所说,你的情况正好相反。您的第一个视图控制器希望传递一个对象,而不会影响他自己的对象。因此,由您的第一个视图控制器创建一个新对象并传递它,而不是传递指向他自己神圣对象的指针。知道您的第一个视图控制器需要保护不是您的第二个视图控制器的工作,而是由您的第一个视图控制器来保护自己。
发布于 2015-04-17 17:30:05
您应该使用“复制”,因为“复制”创建了该对象的重复实例,并且新对象独立于原始对象。“强”向对象添加了一个“链接”,它只是一个对象。
发布于 2015-04-17 17:31:12
我觉得你可以去抄。因为它可以在对象可变时使用。如果您现在需要对象的值,请使用它。您不希望该值反映对象的其他所有者所做的任何更改。当您完成该对象时,您将需要释放它,因为您保留了该副本。
Pl。参考下面的链接,它提供了很好的洞察力,什么时候使用哪个属性。Objective-C declared @property attributes (nonatomic, copy, strong, weak)
https://stackoverflow.com/questions/29705565
复制相似问题