我有一个Objective类,需要采用NSSecureCoding来在XPC连接上传输。该类具有两个不透明类型(dispatch_queue_t和dispatch_group_t)的属性。
在这种情况下,我将如何实现-initWithCoder:和-encodeWithCoder:?文档中说这些是类似对象的结构,所以我假设它们在编码/解码时需要转换为/从原始字节。如果是这样的话,我不确定应该使用哪种方法来做到这一点。另一种选择是完全避免对它们进行编码,并在-initWithCoder:中重新创建它们。
发布于 2013-08-21 11:47:42
并不是所有不透明类型都有通用解决方案,但您提到了dispatch_queue_t和dispatch_group_t。如果调度队列和组对编码对象是私有的,那么就像Kurt所说的那样在-initWithCoder:中重新创建它们。如果它们是共享的,那么它就有点多毛了,但是有时您可以通过归档一个“代理”对象来绕过它,然后在解码对象图之后遍历对象图,用一个新创建的“真实”对象的引用替换对代理项的所有引用。
不过,这听起来有点像反模式。实现NSCoding/NSSecureCoding的类通常是模型类,在模型类的ivars中存在分派队列和组,这是一种危险的标志。我可以想到在模型类ivar中使用私有队列(即序列化对内部状态的多线程访问)的合理理由,而不是共享队列。一般来说,这听起来似乎是有必要重新分解的。
https://stackoverflow.com/questions/18325043
复制相似问题