关于Cocoa的窗口创建调用-一个nib包含两个窗口
2012-09-12 16:31
721 查看
转自http://blog.csdn.net/dongdongdongjl/article/details/7732774
近期在研究cocoa的窗口关系,发现之前写过的一片文章在描述一个nib文件包含两个或者两个以上的窗口时如何实现的文章,写的不清楚,并且很多概念上存在模糊的地方,通过近段时间的调测和学习,对于这部分可以说理解又深刻了一些,因此,在这里从新补充和完善一些概念。
1、关于nib当中的窗口,对象的理解。
对于nib来说,你可以简单的理解为rc,但是这一点还不够,其实nib是可以包含对象的,这句话的理解就是说,当一个nib文件被加载时,那么nib文件当中所描述的窗口资源,对象资源都会被加载到内存当中,但是用不用是取决于开发人员的事情,因此,为了节省内存空间。Cocoa官方的推荐方法是一个窗口对应一个nib,不会占用过多的内存。
2、在nib当中的窗口,包含了NSWindow,NSPanel对象等等,他们对应的类,其实就是后台的类,那么这个类描述,其实只是一个资源类的描述,主要描述大小,标题,位置等等。而实际背后控制的类,叫做NSWindowController类,所以,在cocoa当中处处都存在MVC的设计思想。而且关键一点是只有NSWindowsController类才有showWindows的方法,并不是NSWindows本身去显示自己的。
3、一个nib窗口如何解决两个NSWindow对象的显示问题?
具体方法:
step1、在nib的file owner类,提供两个NSWindow的outlet,让nswindows变成对象。
step2、使用nNSWdindowController控制你需要显示的窗口即可。方法如下:
NSWindowController * controller = [NSWindowController alloc] initWithWindow :mywindow];
[controller showWindow:nil];
4、通常来讲,多窗口的应用是使用多个nib文件的架构进行设计的,那么具体设计方法如何哪?
说明:其实对于多个nib文件来说,有一个概念非常的重要,就是说一个nib是不能够自动被加载的,他必须有一个能够加载他的对象,而这个能够加载他的对象,其实就是nib文件当中FILE'S OWNER对象,这个对象在nib来看是一个虚拟对象,也称之为占位对象。但是对于外部来看,其实这个对象就是所谓的加载对象。还有一点就是说,加载对象,可以只完成加载的任务,也可以完成其他的功能,比如说IBAction,或者IBOutlet的功能等等。还有就是要补充一点,一旦nib被加载,nib当中所包含的所有对象都会被创建,并且可以使用。只是这个过程被cocoa隐藏在了后台,所以程序的开发过程中,看不到有这样的对象存在而已。
加载第二个nib文件的方法有很多,这里简单介绍三种。
第一个,
NSWindowController *controll=[[NSWindowController alloc] initWithWindows:mywindow];
第二个,
NSWindowController *controll = [[ NSWindowController alloc] initWithWindowNibName:@"nibname"]
第三个,
[NSBundle LoadNibNamed:@"nibname" owner : self];
近期在研究cocoa的窗口关系,发现之前写过的一片文章在描述一个nib文件包含两个或者两个以上的窗口时如何实现的文章,写的不清楚,并且很多概念上存在模糊的地方,通过近段时间的调测和学习,对于这部分可以说理解又深刻了一些,因此,在这里从新补充和完善一些概念。
1、关于nib当中的窗口,对象的理解。
对于nib来说,你可以简单的理解为rc,但是这一点还不够,其实nib是可以包含对象的,这句话的理解就是说,当一个nib文件被加载时,那么nib文件当中所描述的窗口资源,对象资源都会被加载到内存当中,但是用不用是取决于开发人员的事情,因此,为了节省内存空间。Cocoa官方的推荐方法是一个窗口对应一个nib,不会占用过多的内存。
2、在nib当中的窗口,包含了NSWindow,NSPanel对象等等,他们对应的类,其实就是后台的类,那么这个类描述,其实只是一个资源类的描述,主要描述大小,标题,位置等等。而实际背后控制的类,叫做NSWindowController类,所以,在cocoa当中处处都存在MVC的设计思想。而且关键一点是只有NSWindowsController类才有showWindows的方法,并不是NSWindows本身去显示自己的。
3、一个nib窗口如何解决两个NSWindow对象的显示问题?
具体方法:
step1、在nib的file owner类,提供两个NSWindow的outlet,让nswindows变成对象。
step2、使用nNSWdindowController控制你需要显示的窗口即可。方法如下:
NSWindowController * controller = [NSWindowController alloc] initWithWindow :mywindow];
[controller showWindow:nil];
4、通常来讲,多窗口的应用是使用多个nib文件的架构进行设计的,那么具体设计方法如何哪?
说明:其实对于多个nib文件来说,有一个概念非常的重要,就是说一个nib是不能够自动被加载的,他必须有一个能够加载他的对象,而这个能够加载他的对象,其实就是nib文件当中FILE'S OWNER对象,这个对象在nib来看是一个虚拟对象,也称之为占位对象。但是对于外部来看,其实这个对象就是所谓的加载对象。还有一点就是说,加载对象,可以只完成加载的任务,也可以完成其他的功能,比如说IBAction,或者IBOutlet的功能等等。还有就是要补充一点,一旦nib被加载,nib当中所包含的所有对象都会被创建,并且可以使用。只是这个过程被cocoa隐藏在了后台,所以程序的开发过程中,看不到有这样的对象存在而已。
加载第二个nib文件的方法有很多,这里简单介绍三种。
第一个,
NSWindowController *controll=[[NSWindowController alloc] initWithWindows:mywindow];
第二个,
NSWindowController *controll = [[ NSWindowController alloc] initWithWindowNibName:@"nibname"]
第三个,
[NSBundle LoadNibNamed:@"nibname" owner : self];
相关文章推荐
- 关于Cocoa的窗口创建调用-一个nib包含两个窗口
- 关于Cocoa的窗口创建调用-一个nib包含两个窗口
- 关于Cocoa的窗口创建调用-一个nib包含两个窗口
- QT创建两个窗口(一个窗口包含另一窗口)
- 创建一个窗口程序(JFrame),标题栏起名为“浏览器”,有一个菜单条,有“文件”、“编辑”、“查看”3个菜单。“文件”菜单有两个菜单项,一项是“打开”,一项是“保存”,“打开”项做成子菜单,有两个菜
- 关于“如何做到在一个类内不通过创建另一个类的对象,却调用另一个类的方法”的问题
- Linux编程:创建一个只包含两个函数的小型静态函数库
- .创建一个窗口程序(JFrame),标题栏起名为“浏览器”,有一个菜单条,有“文件”、“编辑”、“查看”3个菜单。“文件”菜单有两个菜单项,一项是“打开”,一项是“保存”,“打开”项做成子菜单,有两个
- 设计一个窗口,窗口中包含有一个文本框,一个标签,两个按钮,当按下“文本一”按纽时,使得“Hello java!”显示在文本框中,按下“文本二”按纽时,使得“你好 Java!” 显示在文本框中(要求两个
- 定义一个包含私有成员变量和函数的类,再定义一个内部类,在内部类函数中访问外部成员变量,并调用外部函数。在外部类函数中创建内部类对象,调用内部类函数
- 用JAVA语言编写程序:包含两个类,一个类Cricle中包含计算圆周长,面积的方法。在另一个类Compute中给出半径值为10,创建对象,并调用Cricle类中的方法,计算该对象的面积、周长并显示出结
- 关于创建一个输入端和两个输出端遇到问题的解决
- 用Nhibernate连接多个数据库,两个Mysql,一个Sql。还有关于异常和错误码的讨论。包含源代码
- 关于WPF的两个窗口之间通过创建和读取txt传递数据【附源代码】
- 关于C语言创建一个数组的三个方法,其中包含变长数组。
- java程序练习:尝试创建一个父类,在父类中创建两个方法,在子类中覆盖第二个方法,为子类创建一个对象,将他向上转型到基类并调用这个方法。
- lesson7:GUI:创建一个窗口程序(JFrame),标题栏起名为“浏览器”,有一个菜单条,有“文件”、“编辑”、“查看”3个菜单。“文件”菜单有两个菜单项,一项是“打开”
- 调用WINAPI 创建一个窗口并显示一些东西(create a window and display something)
- 一个关于如何创建类似于QQ客户端聊天窗口的模拟小项目
- 尝试创建一个父类,在父类中创建两个方法,在子类中覆盖第二个方法,为子类创建一个对象,将它向上转型到基类并调用这个方法。