2014-10-02 58 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