NSWindow消失了

And*_*w M 1 macos cocoa objective-c

我将此代码设置为在我的应用启动时运行:

    NSRect rect = NSMakeRect(0, 0, 200, 50); //The location of the window
    NSWindow *win = [[NSWindow alloc] initWithContentRect:rect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
    [win setOpaque:NO];

    [win setLevel:NSFloatingWindowLevel];
    //[win setBackgroundColor:[NSColor clearColor]];

    //or

    NSView *myView = [[NSView alloc] initWithFrame: NSMakeRect(0, 0, 200, 50)];
    NSButton *myButton = [[NSButton alloc] initWithFrame:NSMakeRect(10, 5, 180, 40)];

    [myView addSubview: myButton];
    [win setHidesOnDeactivate:NO];

    [win setContentView: myView];

    [win orderFront: nil];
Run Code Online (Sandbox Code Playgroud)

它按预期工作(在屏幕的左下角显示一个按钮)大约一秒钟,然后消失.为什么它会消失?内存管理或其他什么,我该如何解决?

bbu*_*bum 6

首先,在不使用Interface Builder的情况下构建用户界面是非常奇怪的.可以做到并且有一些理由这样做,但它们相当少而且相差甚远.

接下来,该代码本身并不足以说明出了什么问题.以编程方式创建UI会引发一系列问题; gc与否?...你的运行循环是如何配置的?...你有一个正确配置的应用程序包装器吗?

正如Abizem所说,最明显的猜测是你已经启用了GC并且你没有直接或间接地在某个地方的某个全局变量中植入窗口.它在标准的Cocoa应用程序中"正常工作",因为NSWindow实例是通过Cocoa应用程序基础结构(特别是Windows菜单)生根的.