2014-10-02 91 views
3

我想懒洋洋地加载笔尖文件,在斯威夫特,所以我做斯威夫特懒变量和didReceiveMemoryWarning

lazy var MyNib: UINib? = { 
    let uiNib:UINib = MyClass.nib(); 
    return uiNib; 
    }() 

我明白这是只被调用一次。因此,如果我得到一个didReceiveMemoryWarning,测试似乎表明,将它设置为nil没有任何影响,因为它在以后的日期访问时不会被重新初始化,这可以通过Objective C属性来完成。

更多的问题是NSFetchedResultControllers,因为我真的可能希望卸载一个数据负载,然后在以后重新加载。

这怎么能在Swift中实现?

感谢

回答

3

作为一种变通方法,您可以使用一个支持私有属性,它最初是nil,并实现它周围的计算性能。计算出的属性实现了getter和setter,getter检查烘焙属性是否为零,如果需要,初始化它。

private var _nib: UINib? 

var uiNib: UINib { 
    get { 
     if _nib == nil { 
      _nib = MyTestClass.nib(); 
     } 
     return _nib! 
    } 
    set { _nib = nil } 
} 

这种方式可以将属性设置为nil多次,只要你想,是确保它在读模式下访问在下一次再重新初始化。

请注意,此实现不是线程安全的 - 但最有可能它将仅用于主线程。

+2

谢谢。说得通。这不仅仅是使用“懒惰”,这是一个更强大的功能。所以我想知道为什么懒惰甚至会被打扰? – Fittoburst 2014-10-02 12:01:40

+1

懒惰的用例就是该属性初始化一次,并与类实例生存期共享其生命期。它在几种情况下很有用,但不是你的:) – Antonio 2014-10-02 12:03:42

+0

我同意@Fittoburst懒惰当'零'将是一个很好的补充。 – zirinisp 2015-02-20 17:09:45