Bri*_*orh 5 cocoa memory-management objective-c nswindow nswindowcontroller
我正在构建一个Cocoa应用程序,并对使用窗口控制器有疑问.我们的想法是,如果用户从菜单栏中选择New,则会创建一个MyWindowController实例,它是NSWindowController的子类,并显示MyWindow.xib的新窗口.
我正在处理应用程序委托中的操作.从我在搜索周围的东西后看到的东西可以做到.一旦显示窗口,我没有任何理由再存储指向窗口控制器的指针,因为我分配了它,所以在显示窗口之前我也会自动释放它.
[[[[MyWindowController alloc] init] autorelease] showWindow:self];
Run Code Online (Sandbox Code Playgroud)
由于窗口很快就会释放,窗口会在屏幕上短暂显示然后消失.我找到了一个解决方案,我在-showWindow:方法中保留了窗口控制器,并在获得windowWillClose通知后让它自行释放.
- (IBAction)showWindow:(id)sender
{
[self retain];
[[NSNotificationCenter defaultCenter] addObserverForName:NSWindowWillCloseNotification
object:self.window
queue:nil
usingBlock:^(NSNotification *note) {
[self release];
}];
[super showWindow:sender];
}
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?我搜索过Apple文档,但没有找到任何可以使用的实践.这听起来像它应该涵盖的非常基本的东西,所以也许我只是用错误的术语搜索.
通常你会坚持使用窗口控制器,只有在你完成它时才会释放它.我会说你的应用代表会对此负责.如果可以有多个,只需将它们存储在一个数组中.虽然您的解决方案可能有效,但它并不是很优雅.
如果您正在处理基于文档的Cocoa应用程序,则在文档子类方法makeWindowControllers中创建窗口控制器,并让该类包含指向窗口控制器的指针.
归档时间: |
|
查看次数: |
2848 次 |
最近记录: |