为 iOS 应用程序编码,我发现有潜在的理由禁止继承 NSNumber、NSNull、...blabla。
如果我尝试这样做,编译器不会失败,但运行会立即崩溃而没有任何使用信息,有人知道原因吗?
为 iOS 应用程序编码,我发现有潜在的理由禁止继承 NSNumber、NSNull、...blabla。
如果我尝试这样做,编译器不会失败,但运行会立即崩溃而没有任何使用信息,有人知道原因吗?
与任何类集群一样,如果创建 NSNumber 的子类,则必须覆盖其超类 NSValue 的原始方法。此外,您的 NSValue 方法 objCType 的实现可以返回一组受限的返回值,以便利用非原始方法的抽象实现。有效的返回值为“c”、“C”、“s”、“S”、“i”、“I”、“l”、“L”、“q”、“Q”、“f”和“d”。
更准确地说,我相信这是因为您实际上从未有过 NSNumber 的实例。Objective-C 有一个有趣的属性,即类的初始化程序实际上可以更改 self 指向的对象(这实际上可能适用于任何方法,但我只听说过它在 init 方法中使用)。我相信 NSNumber 就是这样做的。
另请参阅Class Clusters上的文档。
嗯……来自NSNumber 类参考,只要您适当地对 NSValue 进行子类化,就可以进行子类化。
子类化注释
与任何类集群一样,如果创建 NSNumber 的子类,则必须覆盖其超类 NSValue 的原始方法。此外,为了利用非原始方法的抽象实现,您的 NSValue 方法 objCType 的实现可以返回一组受限的返回值。有效的返回值为“c”、“C”、“s”、“S”、“i”、“I”、“l”、“L”、“q”、“Q”、“f”和“d”。
我在 NSValue 中没有看到任何子类化注释,但我猜你需要在 NSValue 中实现每个方法。