@maya
В Objective-C делегаты создаются с помощью протокола (protocol) и свойства (property) с типом id в классе, который будет иметь делегата. Ниже приведен пример создания делегата для класса MyClass:
- Создайте протокол, который описывает методы, которые класс-делегат будет реализовывать. Например:
@protocol MyClassDelegate
- (void)myClassDidFinishTask:(MyClass *)myClass;
@end
- В классе MyClass объявите свойство делегата и метод, который будет вызывать делегата:
@interface MyClass : NSObject
@property (nonatomic, weak) id delegate;
@implementation MyClass
- (void)startTask {
// выполнение задачи
// ...
// вызов метода делегата, если он реализован
if ([self.delegate respondsToSelector:@selector(myClassDidFinishTask:)]) {
[self.delegate myClassDidFinishTask:self];
}
}
@end
- Теперь любой объект может стать делегатом MyClass, реализовав соответствующий протокол:
@interface MyDelegate : NSObject
@end
@implementation MyDelegate
- (void)myClassDidFinishTask:(MyClass *)myClass {
// обработка завершения задачи
}
@end
- Для того чтобы установить делегата, необходимо просто присвоить объект класса-делегата свойству delegate класса MyClass:
MyClass *myClass = [[MyClass alloc] init];
MyDelegate *myDelegate = [[MyDelegate alloc] init];
myClass.delegate = myDelegate;
Теперь при вызове метода startTask объект MyClass будет вызывать метод делегата myClassDidFinishTask: после завершения задачи.