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