Swift 懶加載小議
lazy var zyTableView: UITableView = {
let tempTableView = UITableView (frame: self.view.bounds, style: UITableViewStyle.Plain)
tempTableView.delegate = self
tempTableView.dataSource = self
return tempTableView
}()
這是Swift中懶加載一個(gè)叫做zyTableView的變量榨婆。
我們今天就主要來(lái)說(shuō)說(shuō)這段代碼.
先來(lái)說(shuō)一下懶加載的好處:
- 需要的時(shí)候初始化內(nèi)存,對(duì)內(nèi)存開(kāi)銷較小褒侧,節(jié)省內(nèi)部資源
- 代碼初始化放在一起良风,代碼塊比較好劃分谊迄,方便別人和自己閱讀
再來(lái)說(shuō)一下有爭(zhēng)議的地方,我剛才在幾個(gè)群里問(wèn)懶加載效率低不低烟央,有不同意見(jiàn)统诺,有人說(shuō)低,也有人說(shuō)不低吊档,我覺(jué)得懶加載效率是低的篙议,最簡(jiǎn)單的說(shuō)法:
在你需要使用肥皂的時(shí)候,你沒(méi)有肥皂怠硼,然后去撿一個(gè)肥皂鬼贱,和你需要使用肥皂的時(shí)候就有肥皂了,你覺(jué)得哪個(gè)效率高香璃?懶加載就是現(xiàn)去撿肥皂呀这难,所以,懶夾在效率低葡秒。
再來(lái)看看Swift中懶加載的本質(zhì)姻乓,引用絕影的原話:
它本質(zhì)在siwft中確實(shí)是一個(gè)閉包,執(zhí)行順序是這樣的眯牧,如果這個(gè)lazy修飾的變量沒(méi)值蹋岩,就會(huì)執(zhí)行閉包中的東西,不是每次都執(zhí)行(本人補(bǔ)充:這也就是為什么在Swift中的懶加載沒(méi)有oc中判斷学少。if(xx==nil){初始化xx}的代碼段)剪个。
在來(lái)看下一個(gè)問(wèn)題,既然懶加載在Swift中是一個(gè)閉包版确,那么就用閉包來(lái)復(fù)寫(xiě)一個(gè)懶夾在咯:
let name = { () -> String in
return "章魚(yú)哥"
}
lazy var myName:String = self.name()
最后呢扣囊,如果懶夾在初始化失敗怎么辦?
答案:可能值咯绒疗。
lazy var value1:String = {
return "aaa"
}()
lazy var value2:String? = {
return nil
}()
lazy var value1:String 等價(jià)于 lazy var value1:String!
就這樣侵歇,哪里說(shuō)的不對(duì),留個(gè)言吓蘑,我立馬改惕虑。
重要的話說(shuō)好幾遍: