@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: после завершения задачи. |