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