Objective c 是否可以检查nib是否已加载?

Objective c 是否可以检查nib是否已加载?,objective-c,cocoa,macos,Objective C,Cocoa,Macos,在一个循环中,如果用户没有输入他/她的设置,我将使用以下代码加载preferences窗口 [NSBundle loadNibNamed:@"prefs" owner:self]; 我的问题是,每次循环运行时,一个新窗口会一次又一次地打开,直到,有没有办法检查窗口或nib是否已经加载过一次 谢谢!:) 也许您可以创建一个名为PreferencesController的类,让该类在请求时加载nib,将窗口保存在ivar中。每次创建类的实例并激活它时,检查窗口ivar是否为nil。如果是,请加载笔

在一个循环中,如果用户没有输入他/她的设置,我将使用以下代码加载preferences窗口

[NSBundle loadNibNamed:@"prefs" owner:self];
我的问题是,每次循环运行时,一个新窗口会一次又一次地打开,直到,有没有办法检查窗口或nib是否已经加载过一次


谢谢!:)

也许您可以创建一个名为
PreferencesController
的类,让该类在请求时加载nib,将窗口保存在ivar中。每次创建类的实例并激活它时,检查窗口ivar是否为nil。如果是,请加载笔尖,否则只需按窗口键并在前面订购即可

除了存储窗口外,您还可以在用户关闭窗口时监视它。当他或她这样做时,您可以释放您的ivar并将其设置为零。现在,当您再次请求它时,您将看到没有缓存窗口,您必须重新加载nib。不过它可以节省内存

也可以建议创建该类的共享实例。我不能包括一个例子,因为我在我的iPodtouch上,但快速的谷歌搜索应该是非常有用的

希望有帮助, ief2

编辑:下面的链接包含一个关于单身的示例:


也许您可以创建一个名为
PreferencesController
的类,让该类在请求时加载nib,将窗口保存在ivar中。每次创建类的实例并激活它时,检查窗口ivar是否为nil。如果是,请加载笔尖,否则只需按窗口键并在前面订购即可

除了存储窗口外,您还可以在用户关闭窗口时监视它。当他或她这样做时,您可以释放您的ivar并将其设置为零。现在,当您再次请求它时,您将看到没有缓存窗口,您必须重新加载nib。不过它可以节省内存

也可以建议创建该类的共享实例。我不能包括一个例子,因为我在我的iPodtouch上,但快速的谷歌搜索应该是非常有用的

希望有帮助, ief2

编辑:下面的链接包含一个关于单身的示例:


不要像现在这样对nib加载进行微观管理,只需使用
NSWindowController
的子类来处理preferences窗口
NSWindowController
为您处理所有nib管理,您只需调用
-showWindow:
即可显示窗口。
NSWindowController
的唯一真正诀窍是确保将文件所有者的
窗口连接到nib本身

要实例化该类,请使用
-initWithWindowNibName:
传入nib的名称


正如Ief2所提到的,您应该将此对象配置为作为单例。

而不是像您这样对nib加载进行微观管理,只需使用
NSWindowController
的子类来处理preferences窗口
NSWindowController
为您处理所有nib管理,您只需调用
-showWindow:
即可显示窗口。
NSWindowController
的唯一真正诀窍是确保将文件所有者的
窗口连接到nib本身

要实例化该类,请使用
-initWithWindowNibName:
传入nib的名称

正如Ief2所提到的,您应该将此对象配置为作为单例。

的可能重复项的可能重复项