В настоящее время я пытаюсь изучить Cocoa, и я не уверен, правильно ли я это понимаю... Он о делегатах и контроллерах.
Сначала: какая разница между этими двумя? Иногда я вижу код, где класс называется AppController
, иногда - с более или менее одним и тем же контентом - AppDelegate
.
Итак, если я правильно ее понимаю, делегат - это простой объект, который получает сообщения, когда происходит определенное событие. Например:
@interface WindowController : NSObject <NSWindowDelegate>
@end
@implementation WindowController
- (void)windowDidMiniaturize:(NSNotification *)notification {
NSLog(@"-windowDidMiniaturize");
}
@end
Теперь я использую этот код, чтобы сделать его делегатом моего window
:
@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
И теперь, когда я свожу к минимуму window
, он отправит сообщение -windowDidMiniaturize:
в WindowController
. У меня есть это право?
Если да, почему бы вам не просто подкласс NSWindow
вместо того, чтобы беспокоиться о дополнительном классе, о котором вы должны заботиться?