怠け者ロードの2つのメリット:遅延ロード属性(UIタイプコントロールは通常遅延ロード)後のコードでは、遅延ロードの属性は、を強制的に解く必要はありません.
リロードの2つの作成方法:メソッド1:直接宣言プロパティ:private lazy var btn: UIButton = UIButton()
// view ,
メソッド2:完全な閉パケットを使用して作成する:private lazy var btn = { () -> (UIButton) in
let btn = UIButton()
return btn
}()
この方法では、()->(UIButton)inは閉パケットに追随し、省略することができ、省略後、フォーマットは以下の通りである:private lazy var btn = {
let btn = UIButton()
return btn
}()
まとめ:次の理由で、使用方法を提案します.
方法2閉包方式を使用し、閉包中の知能提示が不十分である.
閉パケットでグローバル変数を参照するにはselfを使用する必要がある.呼び出し、注意閉パケットでは循環参照が容易に生成する.
注意: swiftの怠け者ロードとocの1つの場所は異なり、ocの怠け者ロードオブジェクトがnilに置かれた後、selfを再使用する.呼び出すとビューが再作成されますが、swiftではできませんので、swiftでは怠け者のオブジェクトをnil に勝手に置くことはできません.
とgetterとsetterの比較:怠惰ロードの属性は保存され、怠惰ロードの本質は閉パケットであり、初めて属性をロードした後、閉パケットは実行されないため、怠惰ロードで作成された属性は記憶空間を割り当てて保存され、計算型属性は保存されず、使用属性のたびにsetterとgetter が再呼び出される.