本文主要是介绍Resource Programming Guide 之 Nib Files (3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
管理Nib文件中对象的声明周期
每次你让NSBundle或NSNib 类去加载一个nib文件时,基础代码会创建文件中对象的新的拷贝,然后把他们返回给你,(nil-loading 代码不会循环加载之前尝试加载的Nib
文件对象,你需要确保在必要的时候维护新的对象图表,当完成时要和它脱离关系。通常你要对高级对象用强引用以确保他们不会被销毁;你没必要强引用哪些图表中有父类
的类。你应该最小化强引用循环的风险。从实用的角度,在IOS和OSX的输出口中应该被定义为声明属性,输出口一般式weak ,除了Nib文件中的高级对象,这些应该是strong
你创建的输出口一般都是weak,因为
你创建的输出口是控制器的子视图或窗口的子视图,比如在对象间的随意引用不意味着有拥有权
强输出口通常是框架类具体指定的,比如UIViewController 的输出口,Window 的输出口
@property (weak) IBOutlet MyView *viewContainerSubview;
@property (strong) IBOutlet MyOtherClass *topLevelObject;
提示: 在OSX中不是所有的类支持弱引用,有
NSATSTypesetter, NSColorSpace, NSFont, NSFontManager, NSFontPanel, NSImage, NSMenuView,NSParagraphStyle, NSSimpleHorizontalTypesetter, NSTableCellView, NSTextView, NSViewController,
NSWindow, and NSWindowController, and all classes in the AV Foundation framework.
这些不支持weak 的,你应该用assign
@property (assign) IBOutlet NSTextView *textView;
输出口对定义类来说可以认为是私有的,如果你引用,你可以隐藏属性声明一个类的拓展,举例
// MyClass.h@interface MyClass : MySuperclass
@end// MyClass.m@interface MyClass ()
@property (weak) IBOutlet MyView *viewContainerSubview;
@property (strong) IBOutlet MyOtherClass *topLevelObject;
@end
这些模式是为了容器视图对子视图的引用,这里你必须考虑内在的对象图表的一致性。比如在table view cell 输出口是具体的子视图通常是weak,如果table view 包含一个图片视图 和一个 文本视图, 那么这些仍然有效,主要他们是table view cell 自己的子视图。当输出口是自己引用对象时应该改为强引用
如前面说明的,那File's Owner 举例,Nib文件的高级对象通常被认为属于File's Owner
有时候你可能需要Nib文件中的一个对象存在它外部容器里。举例,你可能有一个视图的输出口,这是它可能暂时被原来层次视图中移除了,因此它必须维护一定的独立性
有时候你想把父类中的输出口暴露给子类,以便子类可以合理的使用(像UIViewController的 View 输出口)。输出口可能会暴露给那些自定义类来实现和这些属性的交互。
比如 table view cell 可能暴露给子视图,在之后的例子中,它可以适当的暴露 给public 一个只读 输出口 ,在private 里重写 为 读写属性 例子如下:
// MyClass.h@interface MyClass : UITableViewCell
@property (weak, readonly) MyType *outletName;
@end// MyClass.m@interface MyClass ()
@property (weak, readwrite) IBOutlet MyType *outletName;
@end
OSX中的高级对象需要特殊处理
由于历史的一些原因,OSX中Nib的一些高级对象是以增加引用计数的方式创建的。应用包提供了一对特性来确定这些Nib文件是否被合理释放:
NSWindow 对象(包括 panels)有一个 isReleasedWhenClosed 属性,如果设值为YES这个窗口在关闭的时候,他自己会释放自己以及所有依赖它的对象,在Nib文件中在Xcode的检查器中选择性释放设值选择
(时间精力有限,暂且先翻译到此。。。。hu。。hu。。。hu。。。。)
这篇关于Resource Programming Guide 之 Nib Files (3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!