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

swift - 初始化程序中的 Swift 复制属性

如何确保复制传递给初始化程序的对象,而不仅仅是稍后设置这些属性?

使用@NSCopying,Apple 表示我们可以实现copy类似 -property 的行为。默认情况下,该属性仅被分配,而不调用执行复制的设置器。

这有潜在的危险,因为我想依赖属性是不可变的,并且在我不知情的情况下不会被修改。(想想得到一个NSMutableString而不是NSString- 复制会给我一个不可变的实例)。

0 投票
2 回答
244 浏览

objective-c - 可变与不可变的正确模式

我想知道实现可变与不可变数据结构的正确模式是什么。我理解这个概念以及它是如何工作的,但是如果使用底层的 Cocoa 数据结构,我应该如何实现呢?NSSet我的意思是,例如,如果我使用 a 。可以说我有以下内容:

我使用可变集作为底层数据结构的唯一原因是,此类的可变版本可以篡改它。MyDataStructure本身并不真的需要一个可变集。因此,假设我已经实现了一些初始化程序以使此类有用,MyMutableDataStructure如下所示:

通过使用这种模式,底层数据结构总是可变的,它的不可变版本只是一个不可变的副本(或者是吗??)。

NSCopying这也引出了实现协议时出现的另一个问题。这是一个示例实现:

copyWithZone:如果适用,不返回不可变副本?所以我基本上将 a 分配NSSet给一个NSMutableSet属性,不是吗?

编辑:在深入研究这个问题时,我发现了围绕这个问题的更多问题。

  1. mySet应该copy代替strong.
  2. 我的copyWithZone:实现也不对。我在第一篇文章中没有提到它,但该实现与数据结构 ( MyDataStructure) 的不可变版本有关。正如我所读到的,不可变数据结构实际上并没有创建副本,它们只是返回自己。这就说得通了。
  3. 由于 2.,我需要copyWithZone:在可变版本 ( MyMutableDataStructure) 中覆盖。

为了清楚起见:

起初这似乎很棘手,但我想我已经掌握了窍门。所以剩下的问题是:

  1. 模式是否正确?
  2. getter 是否mySet返回可变或不可变实例?
  3. copy(之前未列出)使用copyproperty 属性时我真的需要信号吗?

感谢您耐心读到这里。最好的。

0 投票
1 回答
63 浏览

objective-c - 使用 -> 而不是 . 在objective-c中实现`copyWithZone:`方法?

假设有一个具有属性 p1 的类 A,并且 p1 的设置器已被覆盖。现在我想为 A 类实现 NSCopying 协议。

据我了解,由于您正在“复制”类 A 的实例,因此无需在方法中触发任何 setter 方法copyWithZone:。所以copyOfInstance -> _p1 = _p1;copyOfInstance.p1 = _p1. 这样对吗?

0 投票
1 回答
505 浏览

swift - 类型“Int”不符合协议“NSCopying”

我正在使用这个自定义集合视图布局实现。我可以很好地运行该 repo 中的示例,但是当我将其复制CustomCollectionViewLayout.swift到自己的项目中时,Type 'Int' does not conform to protocol 'NSCopying'该方法出现错误

哪里var itemAttributesNSMutableArray!

该错误是由第二个索引生成的,[indexPath.row]

有任何想法吗?我尝试将相同的功能放在一个快速的操场上并且没有得到任何错误..

更新!是一个 swiftstub,其中保存了我的游乐场。它不会执行,因为Import UIKit,但以下原因:

产量:

0 投票
2 回答
494 浏览

ios - 如何在 Swift 2.0 中实现 copyWithZone?

以下代码是用 Swift 2.0 编写的,用于创建一个数组dispatch_block_t

该类Block定义如下,

我可以使用上面的代码创建一个 dispatch_block_t 数组。但是,我需要将此数组作为参数传递给另一个函数,并且在传递此数组时遇到问题。

我在按钮单击事件上调用此函数,

执行以下代码段时出现错误,

错误是,

无法将类型“()->()”(0x15164018)的值转换为“Swift.AnyObject”(0x101e500c)。

我在类copyWithZone函数中收到此错误Block

btSimplePopUp 的完整源代码可以在这里查看, https://github.com/balram3429/btSimplePopUp/blob/master/btSimplePopUp/btSimplePopUP.m

0 投票
1 回答
69 浏览

nsdictionary - NSDictionary 到自定义类

我有一个自定义类 QBChatDialog 对象,我将其存储在 sqlite 数据库中,例如

然后我从数据库中检索 NSDictionary 。

如何将其映射回QBChatDialog类,以获取类似dialog.IDor的值dialog.lastMessageText。该类是第三方 API,一些属性是read-only.

谢谢

0 投票
1 回答
188 浏览

swift - swift - HMCharacteristicWriteAction 的 HomeKit updateTargetValue 崩溃

我正在尝试更新操作 ( HMCharacteristicWriteAction) 的目标值,但它总是因 EXC_BAD_ACCESS (code=1, address=0x50) 而崩溃。

我的代码片段:

如您所见,actionis 不是 nil 并且类型正确 ( HMCharacteristicWriteAction)。我可以targetValue成功阅读它。

我使用 分析了项目Product - Analyze,一切正常(没有任何警告)。我也启用了 Zombie,Scheme - Diagnostics但仍然没有运气。


根据updateTargetValue文档:

让我困惑的是targetValue: NSCopying。是否符合“NSCopying”的Int类型?value我确实尝试value as NSCopying过,targetValue但并没有更好。

你能告诉我如何解决这个问题吗?可以通过InttotargetValue吗?什么可能导致此崩溃?

谢谢你。

0 投票
1 回答
358 浏览

swift - swift - NSCopying 类

在 Swift 2.1 中,我应该如何创建一个符合 NSCopying 协议的类?

我试过这个:

但我遇到了错误ambiguous user of value。我应该怎么做才能解决这个问题?

问候

0 投票
2 回答
1088 浏览

ios - 用于创建可变副本的 Objective-C 模式

我有许多“模型”对象,其属性被定义为“只读”并在各种组件之间共享。

在某些情况下,我需要创建对象的本地可变副本(将它们用于本地可变状态)

我宁愿不实现 NSMutableCopy 协议,因为对象在创建后应该是不可变的。修改后的对象可以在复制+变异操作之后“传递”。

是否有建议的机制,或者我应该只实现一个接收“更改”参数的构造函数?

例如,将 JSON 解析为原生类型的对象:

代码中的某处:

0 投票
1 回答
112 浏览

objective-c - 在对象之间复制块

我一直认为,这copy只会复制对象。在块的情况下,它有点不同,但我真的很惊讶它在以下情况下是如何工作的。

我有一个实例objectAobjectB以下类:

objectA是空的。objectB设置了值。在应用程序的某个点,我只想丢弃objectB和离开objectA,所以我需要注入这两个值objectBto objectA

我希望该块被复制到新objectA实例并被objectB释放(因为没有指向它的引用)。

但相反,什么也没有发生。该块,即使它应该,也永远不会再次评估。我应该以其他方式复制它吗?有人可以解释发生了什么以及为什么会发生或指向一些可以解释它的文档吗?

- 编辑 -

片段如何设置块: