由于Objective-C不支持多重继承,是否有其他机制可以在类之间共享代码?
我正在现有的xml架构上编写Cocoa库。架构中的许多元素(例如)用于多种类型。我希望以某种方式集中这个,这样我就不必添加@property NSString *name
和相关代码来为每个具有name属性的类生成name属性的xml。如果支持多重继承,这将是相当简单的,但我不知道如何做到这一点。
我能想到的最好的事情是创建一个公共超类,它具有编码每个可选属性的方法的超集,然后在每个类的编码方法中调用适当的方法(即encodeName
)。这似乎是最好的方式吗?
答案 0 :(得分:1)
我建议您使用属性/函数等创建一个新的Category,并将所述类别添加到NSObject。这将使所有属性和函数可用于NSObject的所有子类。它不完全是多重继承,但提供了很大的灵活性。
答案 1 :(得分:0)
实际上可以使用runtime's Associative Reference函数在运行时向类添加数据。它比普通的SDK工作要深一点,但效果很好。它与具有getter和setter的完整属性不同,但它确实将对象与实例相关联。
答案 2 :(得分:0)
如果只在某些对象上需要这些方法,那么该类中的子类可能是要走的路,或者该特定类的类别会更好。 NSObject上的类别相当广泛。
如果你想添加其他状态,那么子分类可能是你最安全的选择。
如果你确实添加了一个类别,请确保为方法添加前缀,以避免任何冲突。例如。 PSMySpecialMethod
而不是mySpecialMethod