在Lion 10.7上以编程方式创建并打开带有ARC的NSWindow

kil*_*anc 7 cocoa objective-c

我无法弄清楚如何在没有笔尖的情况下分配和打开一个新的NSWindow.

NSRect frame = NSMakeRect(100, 100, 200, 200);
NSUInteger styleMask =    NSBorderlessWindowMask;
NSRect rect = [NSWindow contentRectForFrameRect:frame styleMask:styleMask];
NSWindow * window =  [[NSWindow alloc] initWithContentRect:rect styleMask:styleMask backing: NSBackingStoreBuffered    defer:false];
[window setBackgroundColor:[NSColor blueColor]];
[window makeKeyAndOrderFront: window];
Run Code Online (Sandbox Code Playgroud)

上面的代码取自此线程如何以编程方式创建Cocoa窗口?

Rob*_*ger 15

如果您正在使用ARC,那么除非您对该窗口有强引用,否则它将在引用它的最后一个语句之后立即释放.

ARC改变了您需要考虑对象的方式,从保留/发布模型到所有权模型.如果没有任何东西拥有你的window变量,它就会消失.

有几种方法可以获得窗口的所有权.您可以使用strong关键字将窗口设置为实例变量或类中的属性,也可以__strong在代码中声明变量时使用限定符.

LLVM编译器站点上有关于ARC的更多信息.

  • `__strong`不起作用的原因是因为代码(可能是一个方法)超出范围,并且所有这些局部变量也是如此 (2认同)