我正在编写一个子类NSURL
(以及一个合作子类NSURLProtocol
)。我有意在 URL 对象上存储一个额外的数据属性,以便在 URL 加载中检索和使用。(这只是一个实验;不要判断。)
但是,当我通过创建这些自定义 URL 对象之一然后尝试从中加载来测试类组合时......
NSData * data = [NSData dataWithContentsOfURL:myURL];
...我的 URL 协议得到了一个实际 NSURL
的实例来检查,而不是我创建的实例。这absoluteString
是我所期望的——换句话说,加载内部已经将我的原始 URL 复制到了一个新的 URL——但它不是我的自定义子类,所以它缺少额外的属性。
请注意,我的NSURL
子类正确覆盖-copyWithZone:
了 NSCopying 合规性以及两者-initWithCoder:
和合规-encodeWithCoder:
性NSSecureCoding
。这应该确保任何对我的类的实例进行浅拷贝或深拷贝的人都应该得到一个完整、正确的拷贝。但是在这个过程中这些方法都没有被调用。(也不是absoluteString
, path
,relativeString
等)
有人在没有调用我希望看到的任何方法的情况下“复制”出我的 URL(字符串)内容。我想另一个 Foundation 类可能只是绕过公共接口并访问私有/内部属性来执行此操作。
任何人都可以确认 NSURL 是否从根本上不可子类化?或者如果我可能遗漏了什么?