不是所有的都IBOutlets
应该做weak
。Apple 文档的推荐(资源编程指南)
出口通常应该是弱的,除了从文件所有者到 nib 文件中的顶级对象(或者,在 iOS 中,故事板场景)应该是强的。因此,您创建的 Outlets 通常应该很弱,因为:
例子:
应声明 XIB 中的顶级对象,应将strong
任何其他子视图/控件设为weak
属性。
@property (nonatomic, weak) IBOutlet MyView *viewContainerSubview;
@property (nonatomic, strong) IBOutlet MyOtherClass *topLevelObj;
使用 ARCweak
生命周期限定符有其自身的优势(请参阅 Apple 文档),因为,
__weak 指定一个不使被引用对象保持活动状态的引用。当对象没有强引用时,弱引用设置为 nil。
所以你不必担心设置IBOutlets
nil
,它的生命周期会自动被它的顶级实例绑定。
didReceiveMemoryWarning
应该实施以清除任何占用内存的可重新创建资源。当您收到didReceiveMemoryWarning
调用时,它应该用于释放使用的非关键资源,例如:自定义数据结构、用于填充 UI 的 Web 服务响应等。任何资源的非关键性需要由开发人员决定。