对iOS应用程序进行编码,我发现有可能禁止继承NSNumber,NSNull,... blabla。
如果我尝试这样做,编译器不会失败,但运行会在没有任何使用信息的情况下立即崩溃,是否有人知道原因?
答案 0 :(得分:4)
与任何类集群一样,如果您创建NSNumber的子类,则为 必须覆盖其超类NSValue的原始方法。 此外,还有一组受限制的返回值 执行NSValue方法objCType可以返回,以便 利用非原始的抽象实现 方法。有效的返回值是“c”,“C”,“s”,“S”,“i”,“I”, “l”,“L”,“q”,“Q”,“f”和“d”。
更准确地说,我相信这是因为你从未真正拥有过NSNumber的实例。 Objective-C有一个有趣的特性,即类的初始化器实际上可以改变自身指向的对象(这可能实际上对任何方法都是正确的,但我只听说它在init方法中使用)。我相信NSNumber就是这么做的。
另请参阅Class Clusters上的文档。
答案 1 :(得分:2)
嗯......来自NSNumber Class Reference,只要你适当地继承了NSValue,它看起来就像允许子类化一样。
子类注释
与任何类集群一样,如果创建NSNumber的子类,则必须覆盖其超类NSValue的基本方法。此外,为了利用非原始方法的抽象实现,NSValue方法objCType的实现可以返回一组有限的返回值。有效返回值为“c”,“C”,“s”,“S”,“i”,“I”,“l”,“L”,“q”,“Q”,“f”和“d”。
我在NSValue中没有看到任何子类注释,但我猜你需要在NSValue中实现每个方法。