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