我不明白为什么线程结束后(在ARC下)线程中创建的窗口仍然存在?
这称为:
-(void)prefsWindow:(id)sender {
NSRect frame = NSMakeRect(200, 200, 640, 480);
NSWindow *window = [[NSWindow alloc] initWithContentRect:frame
styleMask:NSTitledWindowMask | NSClosableWindowMask
backing:NSBackingStoreBuffered
defer:NO];
[window center];
[window makeKeyAndOrderFront:NSApp];
[NSThread exit];
}
通过
[NSThread detachNewThreadSelector:@selector(prefsWindow:) toTarget:self withObject:nil];
我希望它会因为超出范围而死亡。谢谢!
答案 0 :(得分:2)
当创建窗口时,AppKit必须具有对它的引用,以便它可以将其表示给窗口管理器等。 AppKit可能有一个保留引用 - 或者您刚刚发布了一个框架仍在使用的窗口,以便很快发生崩溃。
鉴于上述代码,您对窗口对象了解的一件事是您不再拥有窗口的所有权,而不是没有拥有它的所有权。
答案 1 :(得分:2)
窗口仍处于活动状态,因为NSApp仍然拥有强大的引用,因为它是应用程序密钥窗口。
当您不再需要该窗口时,请致电关闭:
[window close];