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。。。。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值