我有一个属性:
@property (strong, nonatomic) NSWindow *window;
在我的实现中,我有两种方法,启动和停止。
start函数创建一个类似于(部分代码)的新窗口:
_window = [[NSWindow alloc] initWithContentRect:screenRect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
stop函数关闭窗口,如下所示:
[_window orderOut:self];
[_window close];
//_window = nil;
然而,当我第二次执行启动功能时(开始,然后停止,然后再次启动),我收到EXC_BAD_ACCESS错误。
这发生在NSWindow alloc语句中。
我需要做些什么才能确保正确创建新窗口?
编辑:经过多次测试后,看来错误与alloc init调用无关。如果我在此之前添加以下行:
NSLog(@"%@", _window);
在第一次调用start时,这将导致输出“null”,然后在调用stop()和新调用start之后,我将在NSLog行上得到一个EXC_BAD_ACCESS错误。
即使只设置_window = nil;在stop方法中(在调用[_window close];之后)导致错误的访问错误。
答案 0 :(得分:0)
在分配对象时获得EXC_BAD_ACCESS很奇怪,检查错误是否在screenRect中
答案 1 :(得分:0)
您需要添加什么:
_window = [[NSWindow alloc] initWithContentRect:screenRect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
[_window setReleasedWhenClosed:NO];
出现EXC_BAD_ACCESS错误的原因是 the window is set to be released when closed, a release message is sent to the object after the current event is completed. For an NSWindow object, the default is to be released on closing.