采用不透明类型的NSSecureCoding



我有一个Objective-C类,它需要采用NSSecureCoding来通过XPC连接进行传输。该类具有两个不透明类型的属性(dispatch_queue_tdispatch_group_t)。

在这种情况下,我将如何实现-initWithCoder:-encodeWithCoder:?文档中说这些都是类似对象的结构,所以我假设在编码/解码时需要将它们转换为原始字节?如果是这种情况,我不确定应该使用哪些方法来实现这一点。另一种选择是简单地避免对它们进行编码,并在-initWithCoder:中重新创建它们。

不是所有不透明类型的通用解决方案,但您提到了dispatch_queue_tdispatch_group_t。如果调度队列和组对编码对象是私有的,那么只需像Kurt Revis所说的那样在-initWithCoder:中重新创建它们。如果它们是共享的,那就有点麻烦了,但有时你可以通过归档一个"代理"对象来解决这个问题,然后在解码后遍历对象图,用对一个新创建的"真实"对象的引用替换对代理的所有引用。

实际上,这听起来像是一种反模式。实现NSCoding/NSecureCoding的类通常是模型类,并且在模型类的ivar中存在调度队列和组是一种危险信号。我可以想出一些合理的理由,在模型类ivar中拥有私有队列(即序列化对内部状态的多线程访问),但不是共享队列。总的来说,听起来可能需要重新考虑。

相关内容

  • 没有找到相关文章

最新更新