问题标签 [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 回答
1450 浏览

objective-c - 在自定义类上使用 -mutableCopyWithZone: 使其不可变

我创建了一个符合NSCopyingand的自定义类NSMutableCopying

-copyWithZone:我已经为and添加了一个实现-mutableCopyWithZone:,但是每当我调用-mutableCopy我的对象并尝试调用另一个方法时,它就会崩溃,因为一些 ivars 已经变得不可变,即使我调用-mutableCopyWithZone:了 ivars。

这是我复制课程的方式:

(代码在 上失败+flip:,因为它试图在ivar上使用removeObjectAtIndex:和)addObject:NSMutableArray

这是我复制课程的方式:

我不确定它为什么会失败,但我真的不明白为什么它不生成arrayobjects可变。

任何帮助表示赞赏。

0 投票
1 回答
832 浏览

ios - NSCopying 自定义对象数组

我有一个管理我所有列表的 Singleton 对象。我们称它为 ListStore。

ListStore 有一个可变数组,用于存储列表。

Lists 有一个可变数组,用于存储事物。

在任何时候,后台进程都可能通过 ListStore 并循环处理所有 List,而用户可能正在与 List 交互。

为了防止“对象在被枚举时发生变异”类型错误,我这样做:

我最初认为因为我制作了一个副本newLists,所以它的所有成员都会被正确复制。我现在明白情况并非如此:我仍然看到“枚举时对象已变异”错误,但这次它发生在list.things.

我可以在我的设置中使用 NSCopying,这样当我说:

它打电话copyWithZone:Lists所以我可以再copyWithZone:things吗?

我试图像这样设置它,但copyWithZone:没有被调用。

我知道我可以简单地说NSArray *newList = [list.things copy],但至少我想更好地了解 NSCopying。

0 投票
1 回答
1682 浏览

iphone - 使用 NSCopy 复制包含指针的自定义对象?

我正在学习如何使用 NSCopy。我想复制我正在使用的自定义对象,它是 UIScrollView 中的 ImageView。

我正在尝试按如下方式实现 NSCopying 协议:

然后将对象复制到另一个类中:

副本是制作的,但是我有一个奇怪的问题。复制对象的 ImageView (a UIImageView) 和 ImageToShow (a UIImage) 属性似乎与原始对象相同。这种在复制代码中是有意义的,因为我重新指向了一个指针,而不是制作新版本的 ImageView 和 ImageToShow。

我的问题是如何制作包含指向其他对象的指针的对象的副本?

谢谢 !

0 投票
1 回答
991 浏览

objective-c - mutableCopyWithZone 令人困惑的要求?

澄清:问题不在于可变与不可变,而是关于调用 super 创建正确类的实例。我没有想过[[self class] alloc]在基类中使用,这似乎解决了我的问题。如果没有更好的结果,我会在接下来的几个小时内接受那个分析器:)


苹果规范说:

这很令人困惑。考虑

如果我遵循规范,我只是不明白这段代码怎么可能是正确的。

当调用[super mutableCopyWithZone: zone]返回时,我期望基类只为其自己的 ivars 分配了足够的空间。它无法判断Derived实例需要更多空间来容纳自己的 ivars。

文档的真正含义是什么?我应该如何实现这个?

0 投票
1 回答
156 浏览

objective-c - 正确 NSCopying 一个“父”属性,使其指向它已经复制的父属性

我有一个包含 B 类属性的 A 类。B 类对其“父”类 A 有一个弱引用。这两个类都实现了 NSCopying。

我不知道在 B 类中究竟应该如何实现 NSCopying。我看到了两个明显的选择:

  1. 将父属性分配给复制的类
  2. 复制父属性并将其分配给复制的类

在第一种情况下,B 中的父属性将指向原始 A。在第二种情况下,父属性是一个全新的副本。

如何正确复制 B 类,以便父属性在 NSCopying 过程中指向新创建的 A 副本?

我想最简单的方法是从 A 类中的 copyWithZone: 更新父属性。但是有什么方法可以在 B 类中这样做吗?

0 投票
3 回答
426 浏览

objective-c - 我可以使用 NSPredicate 作为 NSDictionary 中的键吗

说我有NSPredicate两个

我想要的是,当我pa输入 aNSDictionary并将其与另一个对象相关联时,例如,稍后当我使用I get backobj在字典中检查时。pbobj

它是这样工作的吗?

我看到了NSPredicateimplements NSCopying,所以我希望它可以作为一个键。但我不确定我上面概述的情况。

0 投票
2 回答
1824 浏览

objective-c - NSString 属性和自定义初始化

我有 2 个问题。

首先- 在 obj-c 中是否这样声明字符串

这些是(nonatomic, copy)正确的还是我应该使用(nonatomic, strong),或者别的什么?

第二- 如果我想为上述字符串设置自定义初始化程序,我是否使用

或者我应该使用:

正如我所看到的,这两种方法似乎都适用于这两个问题,但我确信一种方法比另一种更正确,所以我想问我应该使用哪种方法在进一步的项目中编写正确的代码。

谢谢。

0 投票
2 回答
1273 浏览

objective-c - 在Objective-C中使用instancetype作为副本的返回类型?

推荐使用instancetype作为返回值init和相关方法的方法,请参阅最新的clang features。但是,协议中返回值的最佳实践是什么copyWithZone:(有关以前的最佳实践,NSCopying请参阅此线程)?在clang文章中从方法的命名方案推断类的规则中没有提到,但我不明白为什么它应该与alloc方法的返回值不同。

类型推断是否不适用于copy-methods?我们应该返回还是返回instancetype我们实际返回的特定类类型?

0 投票
1 回答
657 浏览

objective-c - 在 copyWithZone 中为具有可变子类的不可变类返回 [self retain] 真的安全/好主意吗?

人们经常读到,不可变类可以通过以下方式非常有效地实现 copyWithZone:

该实现背后的想法很明显:原始实例和副本都是不可变的实例,并且它们将始终具有完全相同的内容,所以为什么不通过保留原始实例来让两者指向相同的存储并避免复制的开销。

但是,如果有一个可变的子类会发生什么?使用干净的架构,子类不必关心其基类的实现细节,可变子类应该可以通过这种方式实现 copyWithZone:

但这对上面的 copyWithZone 的超类实现意味着什么?子类是可变的,所以虽然副本仍然是不可变的,但原来的现在是可变的,但是子类 copyWithZone 由于超类实现对自身的保留实例进行操作:self 和 myCopy 都指向同一个实例,所以如果我稍后更改 mutableOriginal.myMember 的值,那么这也会更改 immutableCopy.myMember,这是完全错误的。

那么不可变类不应该​​通过以下方式更好地实现 copyWithZone 吗?

0 投票
1 回答
2506 浏览

ios - 复制数组本身时如何复制NSArray的所有对象

我有一个对象数组

我想复制数组及其所有内容

“对象”实现 NSCopying

我以为这样做

将在其中包含的对象中触发 copyWithZone。

可惜没有...

如何才能做到这一点?