定义一个属性变量,@property (nonatomic, strong) MyWindow *myWindow;
1、实现懒加载的属性方法
-(MyWindow *)myWindow
{
if (!_myWindow) {
NSRect frame = CGRectMake(0, 0, 400, 200);
NSUInteger style = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask;
_myWindow = [[MyWindow alloc] initWithContentRect:frame styleMask:style backing:NSBackingStoreBuffered defer:YES];
_myWindow.title = @"New Create Window";
[_myWindow center];
}
return _myWindow;
}
2、定义按钮的点击事件,显示myWindow
- (IBAction)showWindowAction:(id)sender {
[self.myWindow makeKeyAndOrderFront:self];
}
你会发现只有第一次你可以正常呼出myWindow显示到屏幕上,当你关闭这个window再点击按钮的时候,程序就会崩溃。
程序崩溃3、我们在myWindow的实现中增加dealloc方法
-(void)dealloc
{
NSLog(@"myWindow dealloc");
}
我们重现运行,点击按钮,显示window。关闭window后发现控制台输出打印myWindow dealloc。这说明虽然我们声明了window为强引用,但是对于window的释放,系统是特殊处理的,只要关闭就释放了。
4、定义一个NSWindowController
@property (nonatomic, strong) NSWindowController *myWindowController;
实现懒加载的属性方法,里面设置了myWindowController和myWindow的关系
- (NSWindowController *)myWindowController
{
if (!_myWindowController) {
_myWindowController = [[NSWindowController alloc] init];
_myWindowController.window = self.myWindow;
}
return _myWindowController;
}
在上面myWindow的懒加载方法中,添加_myWindow.windowController = self.myWindowController;
这样重新运行,反复关闭window再点击按钮打开,没有崩溃。
网友评论