关于Cocoa的窗口创建调用-一个nib包含两个窗口

近期在研究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];

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值