我不明白为什么在线程中创建的窗口在线程结束后仍然活着(在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];
我希望它会死,因为它超出了作用域。谢谢你!
该窗口仍然存在,因为NSApp仍然持有对它的强引用,因为它是应用程序的关键窗口。
当你不再需要这个窗口时调用close:
[window close];
当窗口被创建时,AppKit必须有一个对它的引用,这样它就可以在其他事情中向窗口管理器表示它。很可能AppKit有一个保留引用——或者你刚刚释放了一个仍在被框架使用的窗口,所以很快就会发生崩溃。
根据上面的代码,你知道的关于窗口对象的一件事是你不再拥有窗口的所有权,而不是没有拥有它的所有权。