Вы создаете новый класс, в котором экземпляры 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, - это перехватывать сообщения, отправленные вашему объекту, которые не имеют связанного метода, и пересылать их другому объекту. Этот прием полезен, если вы пишете класс, который будет выдавать себя за другой класс, или если нужно отправить много разных сообщений, и вы не хотите записывать их все вручную.
Недостатком использования пересылки сообщений является то, что вы отказываетесь от некоторого контроля, и может быть сложнее предсказать, когда сообщение будет обработано вашим классом или классом пересылки. Например, если суперкласс реализует метод, этот метод будет выполнен и код пересылки не будет вызван.