【发布时间】:2014-02-13 07:32:54
【问题描述】:
目标:我想创建一个控制器类(最好是单例)以编程方式管理打开和关闭 NSWindows。当一个窗口关闭时,它应该被释放,这样它就不会占用内存。一次只有一个窗口可用。我没有使用 nib 文件。
为每个视图实例化一个新的 NSWindowController 并使用它的 close 方法关闭它似乎会导致内存问题 (EXC_BAD_ACCESS)。
在此示例中,应用程序在通过预定计时器重新打开窗口时崩溃。
AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
self.controller = [[MyController alloc] init];
[self.controller open];
[self.controller close];
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self.controller selector:@selector(open:) userInfo:NULL repeats:false];
}
我的控制器
- (void) open:(NSTimer *) timer {
[self open];
}
- (void) open {
self.windowController = [[NSWindowController alloc]
initWithWindow: [[NSWindow alloc]
initWithContentRect:NSMakeRect(30, 30, 300, 300)
styleMask:NSTexturedBackgroundWindowMask
backing:NSBackingStoreBuffered
defer:false]];
[[self.windowController window] setReleasedWhenClosed:true];
[[self.windowController window] orderFrontRegardless];
}
- (void) close {
[self.windowController close];
}
显然,这感觉是一种糟糕的方法。实现目标的更好设计是什么?
【问题讨论】:
标签: objective-c macos cocoa