在Objective-C中的类之间共享代码而不继承?

在Objective-C中的类之间共享代码而不继承?,objective-c,inheritance,properties,multiple-inheritance,Objective C,Inheritance,Properties,Multiple Inheritance,既然Objective-C不支持多重继承,那么是否有其他机制在类之间共享代码 我正在现有xml模式的基础上编写一个Cocoa库。模式中的许多元素(例如)用于多种类型。我希望以某种方式将其集中化,这样我就不必添加@property NSString*name和相关代码来为每个具有name属性的类中的name属性生成xml。如果支持多重继承,这将是相当简单的,但我不知道如何否则做 我能想到的最好的方法是创建一个公共超类,它有一个方法的超集来编码每个可选属性,然后在每个类的编码方法中调用适当的方法(即

既然Objective-C不支持多重继承,那么是否有其他机制在类之间共享代码

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


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

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

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

实际上可以在运行时使用函数向类添加数据。它比普通的SDK工作稍微深一点,但是工作得相当好。它与具有getter和setter的full属性不同,但它确实将对象与实例相关联

实际上可以在运行时使用函数将数据添加到类中。它比普通的SDK工作稍微深一点,但是工作得相当好。它与具有getter和setter的full属性不同,但它确实将对象与实例相关联

如果只在某些对象上需要这些方法,那么可以选择该类中的子类,或者该特定类中的类别更好。NSObject上的类别是一个相当广泛的网络

如果您想添加额外的状态,那么子分类可能是您最安全的选择


如果确实添加了一个类别,请确保在方法前面加上唯一的前缀,以避免任何冲突。例如,
PSMySpecialMethod
mySpecialMethod

相反,如果这些方法仅在某些对象上需要,那么可以选择该类的子类,或者该特定类上的类别更好。NSObject上的类别是一个相当广泛的网络

如果您想添加额外的状态,那么子分类可能是您最安全的选择


如果确实添加了一个类别,请确保在方法前面加上唯一的前缀,以避免任何冲突。例如,
PSMySpecialMethod
mySpecialMethod

相反,我在我的第一个Objective-C项目中使用了相同的技术。我在我的第一个Objective-C项目中使用了相同的技术。这比将我所有的方法放在一个共享基类上好吗?特别是,我不认为你可以将属性添加到一个类别中。你可以从你真正想要的对象中获得子类的好处,而不是一个人工的超类,它只是你常用函数的持有者。如果需要向类添加属性,那么使用扩展并按照KVC自己创建getter/setter。这比将所有方法放在共享基类上好吗?特别是,我不认为你可以将属性添加到一个类别中。你可以从你真正想要的对象中获得子类的好处,而不是一个人工的超类,它只是你常用函数的持有者。如果需要向类添加属性,那么使用扩展并按照KVC自己创建getter/setter。