十八、Swift3.0之懶加載和initWithCoder方法

自定義繼承自UILabel的DemoLabel。所有UIView及子類在開發(fā)中,一旦重寫了構(gòu)造函數(shù),必須要實現(xiàn)initWithCoder函數(shù),以保證純代碼和XIB/SB兩個通道。其中fatalError()方法,如果使用了XIB或SB,并且寫上了這句代碼,就會崩潰。

class DemoLabel: UILabel {
    //重寫構(gòu)造函數(shù)
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }
    //initWithCoder  這是xib/SB的入口
    //提示:所有UIView及子類在開發(fā)中,一旦重寫了構(gòu)造函數(shù),必須要實現(xiàn)initWithCoder函數(shù),以保證兩個通道
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        //寫上這句代碼,如果用xib開發(fā)會崩潰,禁止xib和SB使用本類
        //也就是如果使用了XIB或SB,并且寫上了這句代碼,就會崩潰
        fatalError()
        setupUI()
    }
    func setupUI() {
        print("設置界面")
    }
}

懶加載基本寫法。

 //懶加載的基本實現(xiàn)
    //1、借助關鍵詞lazy
    //2、懶加載的好處:延遲創(chuàng)建、避免解包的煩惱
       //3、懶加載要指明類型
    lazy var label: DemoLabel = DemoLabel()

懶加載的完整寫法如下:

    //懶加載本質(zhì)上是一個閉包
    //僅供參考,實際開發(fā)不建議這樣寫:因為閉包中只能提示不好,而且還要注意循環(huán)引用
    lazy var label = {() -> DemoLabel in
       let l = DemoLabel()
        return l
    }()

Swift和OC中懶加載的區(qū)別:
OC中的懶加載,如果最開始調(diào)用懶加載創(chuàng)建對象,中間再次將對象設置為nil,之后會再次調(diào)用懶加載方法。
Swift中的懶加載:如果想設置對象為nil,對象必須設置為可選。并且對象一旦設置為nil,懶加載不會再次執(zhí)行。換句話說懶加載只會在第一調(diào)用的時候執(zhí)行閉包,然后將閉包的結(jié)果保存在對象的屬性中。

    //懶加載
    private lazy var label: UILabel? = UILabel()
    override func viewDidLoad() {
        super.viewDidLoad()
        label?.text = "sss"
        label?.sizeToFit()
        print(label)
        label = nil
        print(label)
    }

所以從上面我們可以得出:Swift中一定要注意不要主動清理視圖或空間,因為懶加載不會再次創(chuàng)建。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,383評論 4 61
  • 一、深復制和淺復制的區(qū)別? 1、淺復制:只是復制了指向?qū)ο蟮闹羔?,即兩個指針指向同一塊內(nèi)存單元!而不復制指向?qū)ο蟮?..
    iOS_Alex閱讀 1,531評論 1 27
  • 在工程中導入AFNetworking的庫以及ZJModelTool庫 json 解析: ZJModelTool 是...
    亦晴工作室閱讀 356評論 0 1
  • 去拿快遞的時候,遇見一位年紀很大的但依然還運快遞的老爺爺,在感慨他勤勞,生活艱辛的同時,聽到了他說這樣一句話:我...
    忽爾今至閱讀 237評論 0 0
  • 哈,你問我,最重要的事情是什么,我的答案是財富自由啊,早日迎娶白富美,走上人生巔峰。 當然啦,以上后半句是開玩笑的...
    戎馬未央閱讀 270評論 0 0

友情鏈接更多精彩內(nèi)容