В настоящее время я пытаюсь изучить Какао и не уверен, правильно ли я это понимаю ... Речь идет о делегатах и контроллеры .
Сначала: в чем разница между ними? Иногда я вижу код, в котором класс называется 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
, вместо того, чтобы возиться с дополнительным классом, о котором вы должны позаботиться?