Что такое делегат в Какао и почему я должен его использовать?

В настоящее время я пытаюсь изучить Какао и не уверен, правильно ли я это понимаю ... Речь идет о делегатах и контроллеры .

Сначала: в чем разница между ними? Иногда я вижу код, в котором класс называется AppController , некоторые раз - с более-менее одинаковым содержанием - AppDelegate .

Итак, если я правильно понимаю, делегат - это простой объект, который получает сообщения, когда происходит определенное событие. Например:

@interface WindowController : NSObject <NSWindowDelegate>
@end

@implementation WindowController
- (void)windowDidMiniaturize:(NSNotification *)notification {
    NSLog(@"-windowDidMiniaturize");
}
@end

Теперь я использую этот код, чтобы сделать его делегатом моего окна :

@interface TryingAppDelegate : NSObject <NSApplicationDelegate> {
    NSWindow *window;
}

@property (assign) IBOutlet NSWindow *window;
@property (retain) WindowController *winController;

@end

Со следующей реализацией:

@implementation TryingAppDelegate

@synthesize window;
@synthesize winController;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSLog(@"-applicationDidFinishLaunching:");

    self.winController = [[WindowController alloc] init];
    [window setDelegate:winController];

    [self.winController release];
}

@end

И теперь, когда я минимизирую окно ], он отправит сообщение -windowDidMiniaturize: в WindowController . Имею ли я это право?

Если да, то почему бы вам просто не создать подкласс NSWindow , вместо того, чтобы возиться с дополнительным классом, о котором вы должны позаботиться?

11
задан Michiel Kauw-A-Tjoe 10 April 2014 в 13:29
поделиться