我正在读一本书,建议我的应用收到内存不足警告时,将IBOutlets
声明为weak
应该可以解决此问题。例如,我现在不再需要在viewDidUnload
方法中将这些出口设置为nil。
我也听说过iOS6弃用了viewDidUnload
,而是调用了didReceiveMemoryWarning
。
无论如何,我应该如何继续,我应该将IBOutlet
声明为weak
,并且“忘记”实现didReceiveMemoryWarnings
和viewDidUnloads
的方法吗?
最佳答案
并非所有IBOutlets
都应设为weak
。 Apple docs (Resource Programming guide)的推荐
除了从文件所有者到笔尖文件(或在iOS中为情节提要场景)中的顶级对象的插座外,插座通常应较弱。因此,您创建的插座通常应该比较弱,因为:
例:
XIB中的顶级对象应声明为
strong
,任何其他子视图/控件均应设置为weak
属性。 @property (nonatomic, weak) IBOutlet MyView *viewContainerSubview;
@property (nonatomic, strong) IBOutlet MyOtherClass *topLevelObj;
使用ARC
weak
生存期限定符具有其自身的优势(Refer Apple docs),因为,__weak指定一个引用,该引用不能使引用的对象保持 Activity 状态。如果没有对对象的强引用,则将弱引用设置为nil。
因此,您无需担心设置
IBOutlets
nil
,其生存期将自动受其顶级实例约束。应该实现
didReceiveMemoryWarning
来清除占用内存的所有可重新创建的资源。当您收到didReceiveMemoryWarning
调用时,应使用它释放未使用的非关键资源,例如自定义数据结构,用于填充UI的Web服务响应等。任何资源的非关键性都需要由开发人员确定。关于ios - didReceiveMemoryWarning,viewDidUnload,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18378866/