gpt4 book ai didi

objective-c - 类组合在 iOS 中是如何工作的?

转载 作者:IT王子 更新时间:2023-10-29 08:08:49 28 4
gpt4 key购买 nike

假设我在 classA 上有属性 A,在 classB 上有属性 B,我想要 classAB 同时具有属性 AB。我仍然不明白如何使用组合 来实现这一切。

我知道这可以通过继承来完成,但我想学习如何使用组合 来完成。我看过示例,但仍然不明白它是如何工作的。

最佳答案

你创建了一个新类,它有 classA 和 classB 的实例作为成员变量。然后通过 get/set 方法实现属性。

@interface ClassAB
{
ClassA *objectA;
ClassB *objectB;
}
@property (nonatomic,strong) id propertyA;
@property (nonatomic,strong) id propertyB;
@end

@implementation ClassAB
- (id)propertyA { return objectA.propertyA; }
- (void)setPropertyA:(id)value { objectA.propertyA = value; }
- (id)propertyB { return objectB.propertyB; }
- (void)setPropertyB:(id)value { objectB.propertyB = value; }
@end

这就是合成。有些语言有特殊的语法来执行此操作(例如,在 Ruby 中,您可以在另一个类/模块中包含一组方法),但 Objective-C 不允许这样做。

可以在 Objective-C 中做的一件事是捕获发送到您的对象但没有关联方法的消息,并将它们转发给另一个对象。如果您正在编写一个将伪装成另一个类的类,或者如果有许多不同的消息要转发并且您不想手动将它们全部写出,则此技巧很有用。

使用消息转发的缺点是您会放弃一些控制权,并且很难预测消息何时会被您的类或转发类处理。例如,如果父类(super class)实现了一个方法,则该方法将被执行,转发代码将不会被调用。

关于objective-c - 类组合在 iOS 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9710411/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com