如何子类化NSWindowController?替换废弃Nib加载方法遇文档疑问
替换废弃的
+(BOOL)loadNibNamed:owner:为initWithWindowNib的正确实践 最近在给macOS应用做代码迭代时,正好要把废弃的+(BOOL)loadNibNamed:owner:替换成苹果推荐的initWithWindowNib系列方法,特意查阅了苹果官方的《Mac文档型应用编程指南》,这里把关键要点和具体实现整理出来。
苹果官方指南里的核心提示:
《Mac文档型应用编程指南》中“NSWindowController子类管理Nib文件”章节提到:NSWindowController对象需通过initWithWindowNib...方法指定要加载的nib文件,因它是默认行为的通用实现……
具体实现步骤
- 首先,创建(或使用已有的)
NSWindowController子类,比如命名为CustomWindowController - 在子类的初始化方法中,调用
initWithWindowNibName:(或带bundle参数的重载方法)来指定要加载的nib文件:@implementation CustomWindowController - (instancetype)init { // 这里传入你的nib文件名,注意不需要加.nib后缀 self = [super initWithWindowNibName:@"CustomWindow"]; if (self) { // 这里可以添加窗口控制器的自定义初始化逻辑 } return self; } @end - 当需要展示窗口时,直接初始化这个控制器实例并调用
showWindow:即可:CustomWindowController *windowController = [[CustomWindowController alloc] init]; [windowController showWindow:self];
为什么推荐这种方式
比起直接调用loadNibNamed:owner:,用NSWindowController管理nib更符合苹果的设计规范:它会自动处理nib的加载流程、窗口的生命周期(比如窗口关闭时的资源释放),还能把窗口相关的逻辑集中在控制器里,让代码结构更清晰易维护。
内容的提问来源于stack exchange,提问作者Shebuka
相关产品推荐
相关产品推荐

