在没有继承的情况下在Objective-C中的类之间共享代码?

时间:2011-07-05 23:18:49

标签: objective-c inheritance properties multiple-inheritance

由于Objective-C不支持多重继承,是否有其他机制可以在类之间共享代码?

我正在现有的xml架构上编写Cocoa库。架构中的许多元素(例如)用于多种类型。我希望以某种方式集中这个,这样我就不必添加@property NSString *name和相关代码来为每个具有name属性的类生成name属性的xml。如果支持多重继承,这将是相当简单的,但我不知道如何做到这一点。

我能想到的最好的事情是创建一个公共超类,它具有编码每个可选属性的方法的超集,然后在每个类的编码方法中调用适当的方法(即encodeName)。这似乎是最好的方式吗?

3 个答案:

答案 0 :(得分:1)

我建议您使用属性/函数等创建一个新的Category,并将所述类别添加到NSObject。这将使所有属性和函数可用于NSObject的所有子类。它不完全是多重继承,但提供了很大的灵活性。

答案 1 :(得分:0)

实际上可以使用runtime's Associative Reference函数在运行时向类添加数据。它比普通的SDK工作要深一点,但效果很好。它与具有getter和setter的完整属性不同,但它确实将对象与实例相关联。

答案 2 :(得分:0)

如果只在某些对象上需要这些方法,那么该类中的子类可能是要走的路,或者该特定类的类别会更好。 NSObject上的类别相当广泛。

如果你想添加其他状态,那么子分类可能是你最安全的选择。

如果你确实添加了一个类别,请确保为方法添加前缀,以避免任何冲突。例如。 PSMySpecialMethod而不是mySpecialMethod