问题标签 [nscopying]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1307 浏览

objective-c - NSCopying 和 copyWithZone: - 他们应该返回 [self retain] 还是其他东西?

我很难理解 copyWithZone。

我知道它应该返回一个副本,但是如果我将一个对象添加到字典中,它会在字典中添加一个“copyWithZone”对象。如果我制作一个实际的副本(即一个新对象),那么添加到字典中的对象将不是同一个对象。但是,如果我只增加保留计数,那么从技术上讲它不是副本。

我应该保留自我还是制作实际副本?

0 投票
2 回答
132 浏览

objective-c - 关于复制 NSArray 的最后一个对象的问题

我有一个 MyObjects 的 NSArray。

我想复制数组的最后一个对象。换句话说,我想向数组中添加一个与上一个完全相同的新对象。

我试过:

但是我意识到我不能使用复制方法,因为它没有在 NSObject 中实现。

我是否应该在 MyObject 类中实现复制方法,返回 MyObject 的新实例并更改代码如下:

还是有其他解决方案?

更新 来自 NSObject 文档

NSObject 本身不支持 NSCopying 协议。子类必须支持该协议并实现 copyWithZone: 方法。copyWithZone: 方法的子类版本应该首先向 super 发送消息,以合并其实现,除非子类直接来自 NSObject。

0 投票
2 回答
2628 浏览

objective-c - NSCopying、copyWithZone 和 NSDictionary

首先,我想确认我已经正确理解了 NSCopying ...

为了使用简单的 NSObject 子类作为 NSDictionary 中的键,我必须让它实现 NSCopying 协议。在复制的实例的 copyWithZone 方法中,我必须分配/初始化我的类的一个新实例,将其属性设置为与复制的实例相同并返回它。

其次,为什么 NSDictionary 使用添加到它的实例的副本而不是实例本身?

0 投票
5 回答
1644 浏览

objective-c - 为什么在实施 NSCopying 时 zone 总是为零?

这可能是一个简单的问题,但为什么在我的课堂上实现 NSCopying 协议,我得到zone == nil

使用此方法调用带有对象的复制数组。

0 投票
1 回答
189 浏览

iphone - 保存 CoreData 结果数组,即使它从 CoreData 中删除

我想将记录保存在一个数组中并从 CoreData 中删除它们。我曾尝试使用 NSCopying,但似乎 copyWithZone 不适用于 NSManagedObject。我真的被卡住了,任何帮助将不胜感激。

0 投票
1 回答
142 浏览

objective-c - 在赋值中使用复制方法时未检查数据类型

我对复制有疑问

概述:

  • 我有两节课Car,即MutableCar
  • 这两个类都符合协议NSCopying
  • 该方法copy将返回一个实例Car

问题

  1. 为什么编译器不会为以下语句抛出任何编译错误?

    MutableCar* c2 = [c1 copy];

    编译器允许我将 Car* 分配给 MutableCar* 指针变量

  2. 有什么方法可以防止在编译时被忽视吗?

    恕我直言,这可能会导致运行时崩溃,如下例所示。

代码(在单独的文件中)

注意事项- 使用自动引用计数 (ARC)

汽车.h

可变汽车

可变卡

测试.m

0 投票
1 回答
923 浏览

cocoa - copyWithZone: 中的“区域”是什么意思?

我正在浏览 Chung 的“Pro. Objective-C Design Patterns for iOS”,发现

_sharedSinglton = [[super allocWithZone: NULL] init];

我也查看了 Apple 的NSCopying文档,但无法真正理解 ZONE 的真正含义。

0 投票
1 回答
587 浏览

nsmutablearray - 无法将 NSMutableArray 复制到属性

我已经阅读了无数关于在这个站点和其他站点上复制数组的问题,但没有一个直接解决我遇到的问题。

我已经声明并合成了一个名为 arrXTurbulenceValues 的属性:

我在 ViewDidLoad() 方法中初始化数组:

一些处理发生在方法中,其中值存储到 NSMutableArray。在该处理结束时,我试图通过以下代码将 NSMutableArray 深度复制到 NSArray 属性中:

复制失败,self.arrXTurbulenceValues 仍然为零。我试图复制的 tempXvalues 数组中包含 1900 多个 NSString 对象。

我究竟做错了什么?我已经尝试在 ViewDidLoad() 中使用 & 不进行初始化的复制代码,并且我还尝试将属性配置为 NSArray 和 NSMutableArray。

NSString 是否响应 NSCopying?看来,如果我正确阅读了文档。

与 Objective C 耦合的 iOS 环境是一场噩梦。我从未见过如此挑剔的事情。啊。

0 投票
2 回答
3353 浏览

iphone - 覆盖 copy 或 copyWithZone: 或两者兼而有之?

我对查看 Apple 的文档和阅读 Cocoa 设计模式感到困惑。在 Apple 文档中copyWithZone:,它写道:

存在此方法,因此可以在需要符合 NSCopying 协议的对象的情况下使用类对象。例如,此方法允许您使用类对象作为 NSDictionary 对象的键。您不应覆盖此方法。

因为copy它写道:

对于采用 NSCopying 协议的类来说,这是一种方便的方法。如果没有 copyWithZone: 的实现,则会引发异常。

NSObject 本身不支持 NSCopying 协议。子类必须支持该协议并实现 copyWithZone: 方法。copyWithZone: 方法的子类版本应该首先向 super 发送消息,以合并其实现,除非子类直接来自 NSObject。

在 Cocoa 设计模式中的示例中,它们会覆盖copyWithZone:并且在符合协议时mutableCopyWithZone:不会覆盖。如果我想在 an 中使用我的自定义子类作为键,我应该这样做吗? copyNSCopyingNSDictionary

还是我覆盖copy

同样,如果我这样做[myClass copy],那是调用copyWithZone:还是copy我的自定义子类?谢谢。

0 投票
2 回答
466 浏览

objective-c - 如何继承 UIButton 以允许复制和编码以进行归档?

我有一个应用程序,我需要一直跟踪最后按下的按钮。所以我实现了这个方法:

然后,当按下任何按钮时,我会调用:

完美运行。但是现在我正在归档我的应用程序中的所有对象,当视图消失或关闭然后取消归档它并且 UIButton 不符合 NSCopying 或 NSCoding 时。我读过我可以继承 UIButton 并定义方法,但我被困在那里。

因此,当我的应用关闭或视图消失时,我想保存 lastButtonPressed。

我创建了一个名为 BIDPersistence 的新类来保存我的归档数据。在我的应用程序的视图控制器中,我有一个 saveData 方法来保存我的数据。我在下面显示的最后一行出现错误,因为 UIButton 不符合要求。

任何帮助表示赞赏。