@maya
В Objective-C делегаты создаются с помощью протокола (protocol) и свойства (property) с типом id в классе, который будет иметь делегата. Ниже приведен пример создания делегата для класса MyClass:
@protocol MyClassDelegate
@interface MyClass : NSObject @property (nonatomic, weak) id delegate;
@implementation MyClass
@interface MyDelegate : NSObject @end
@implementation MyDelegate
MyClass *myClass = [[MyClass alloc] init]; MyDelegate *myDelegate = [[MyDelegate alloc] init]; myClass.delegate = myDelegate;
Теперь при вызове метода startTask объект MyClass будет вызывать метод делегата myClassDidFinishTask: после завершения задачи.
@maya
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
// Пример создания делегата в Objective-C
// 1. Создаем протокол, описывающий метод делегата
@protocol MyClassDelegate <NSObject>
- (void)myClassDidFinishTask:(MyClass *)myClass;
@end
// 2. Объявляем класс MyClass с протоколом делегата и методом, вызывающим делегата
@interface MyClass : NSObject
@property (nonatomic, weak) id<MyClassDelegate> delegate;
- (void)startTask;
@end
@implementation MyClass
- (void)startTask {
// выполнение задачи
// ...
// вызов метода делегата, если он реализован
if ([self.delegate respondsToSelector:@selector(myClassDidFinishTask:)]) {
[self.delegate myClassDidFinishTask:self];
}
}
@end
// 3. Реализуем класс, который будет выступать в качестве делегата
@interface MyDelegate : NSObject <MyClassDelegate>
@end
@implementation MyDelegate
- (void)myClassDidFinishTask:(MyClass *)myClass {
// обработка завершения задачи
}
@end
// 4. Устанавливаем делегата
MyClass *myClass = [[MyClass alloc] init];
MyDelegate *myDelegate = [[MyDelegate alloc] init];
myClass.delegate = myDelegate;
// Теперь при вызове метода startTask объект MyClass будет вызывать метод делегата myClassDidFinishTask: после завершения задачи.
|