首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >非原子性强/复制?

非原子性强/复制?
EN

Stack Overflow用户
提问于 2015-04-17 17:14:39
回答 3查看 171关注 0票数 0

我正在构建一个应用程序,而我有一个ViewController正在查看一个自定义对象,让我们将这个对象称为"CustomObject“。在按下按钮时,将触发一个segue,因此调用prepareForSegue,在其中获取目标ViewController并传递self.myObject。目标ViewController可能会更改CustomObject的几个部分,但如果用户决定返回原始ViewController,则这些更改不应反映在原始ViewController中。只有当用户按下目标ViewController中的“保存”,从而触发NSNotification时,才能反映这些更改,该CustomObject的版本应该在原始ViewController中重新加载,如下所示:

代码语言:javascript
复制
self.myObject = (CustomObject *)notification.object;

因此,我的问题如下:,我应该使用哪些(或任何其他正确的)-为什么?

代码语言:javascript
复制
@property (nonatomic, strong) CustomObject *myObject;
@property (nonatomic, copy) CustomObject *myObject;

谢谢!

更新:

头文件:

代码语言:javascript
复制
@interface CustomObject : NSObject <NSCopying>

实施文件:

代码语言:javascript
复制
- (id)copyWithZone:(NSZone *)zone
{
id copy = [[[self class] alloc] init];
if (copy)
{
    // Copy NSObject subclasses
    [copy setRegisterDate:[self.registerDate copyWithZone:zone]];

}
return copy;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-17 17:36:27

您应该使用strong但是(在prepareForSegue中)创建和传递一个副本(或者只是一个不同的对象,但无论如何,不要传递原始对象)。

这与设计copy属性的情况正好相反。有了copy属性属性,接收方希望确保对象以后不会在后台发生变异:例如,我接受NSString,但调用方传递给我一个NSMutableString,并保留它,这样现在可以在后台更改字符串。通过调用copy,我将NSMutableString转换为不可变的NSString。

正如我所说,你的情况正好相反。您的第一个视图控制器希望传递一个对象,而不会影响他自己的对象。因此,由您的第一个视图控制器创建一个新对象并传递它,而不是传递指向他自己神圣对象的指针。知道您的第一个视图控制器需要保护不是您的第二个视图控制器的工作,而是由您的第一个视图控制器来保护自己。

票数 2
EN

Stack Overflow用户

发布于 2015-04-17 17:30:05

您应该使用“复制”,因为“复制”创建了该对象的重复实例,并且新对象独立于原始对象。“强”向对象添加了一个“链接”,它只是一个对象。

票数 0
EN

Stack Overflow用户

发布于 2015-04-17 17:31:12

我觉得你可以去抄。因为它可以在对象可变时使用。如果您现在需要对象的值,请使用它。您不希望该值反映对象的其他所有者所做的任何更改。当您完成该对象时,您将需要释放它,因为您保留了该副本。

Pl。参考下面的链接,它提供了很好的洞察力,什么时候使用哪个属性。Objective-C declared @property attributes (nonatomic, copy, strong, weak)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29705565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档