Swift學習(4懶載入、計算型屬性、反射機制)

來源:互聯網
上載者:User

標籤:架構   實現   xcode   機制   命名空間   set   rms   uilabel   日常   

懶載入、計算型屬性、反射機制

1.懶載入:

目的:1.延遲建立,需要時載入,節省記憶體空間

2.避免開發中處理解包的問題(重要!!!)

 

知識:1.所有的UIView 及子類在開發是,一旦重寫了夠著函數,必須要實現initwithcoder函數以保證提供兩個通道,目前Xcode會有提示。

2.在swift中懶載入的簡單寫法

lazy var label:UILabel = UILabel()

3.懶載入本質上是一個閉包,完整寫法如下:

{}封裝代碼  ()執行代碼

lazy var labe = {()->UILabel in

let l = UILabel()

return l

}()

注意的是瞭解就好,因為日常開發法中在閉包中的提示不太好,且需要注意循環參考

4.懶載入和OC的區別:

(1)在OC中是使用get方法實現懶載入的。

(2)OC中只要設定成nil以後,可以再通過get方法重新載入,而在swift中懶載入只能載入一次,如果設定成nil以後,就不能直接通過懶載入重新建立

 

2.計算型屬性

引導:

1.getter & setter 僅用於示範,日常開發不用:

private var _name:String?

var name:String{

get{

return  _name

}

set{

_name = newValue

}

}

2. readonly  的實現:重寫getter方法,通過唯寫get方法實現。

var title:String{

get{

return “mr 老王”

}

}

計算型屬性:

1.readonly 簡寫  :直接return

var title:String{

return “老王”

}

其實這就是一個計算型屬性:本身是不儲存內容,都是通過計算獲得的。類似於一個函數,沒有參數只有傳回值,每次計算都會重新計算一次。

 

3.懶載入和計算型屬性的區別

1.代碼非常類似!!! 懶載入只是多了一個 ‘lazy’ 和’=’

2.懶載入會在第一次訪問的時候執行,閉包執行結束後會儲存結果到屬性,第二次調用的時候是不會重新執行閉包的。計算型屬性每次訪問都會執行一次閉包

 

4.利用重寫set方法實現通過模型賦值改變UI

var person:Person? {

didSet {

//此時name屬性有值,可以直接使用

self.text = person?.name

}

}

 

5.命名空間&反射機制

1.反射機制的概念

(1)在任意一個類,都能通過方法來擷取這個類的所有屬性和方法

(2)對於任何一個對象,都能調用他的任意一個方法和屬性

(3)這種動態擷取資訊及動態調用對象的方法功能成為Java 語言的反射機制

2.在OC中如何使用反射機制

(1)利用NSClassFromString 方法來使用字串擷取類

(2)isMemberofClass

(3)isKindofClass

(4)conformstoprotorol

(5)respondstoselector

(6)performSelector 或者obj_msgSend

3.主義事項:

(1)在Swift中有命名空間

(2)在同一個命名空間全域共用

(3)第三架構使用swift如果直接拖拽到項目中,從屬於同一個命名空間可能會有重提

(4)在Swift中 NSClassFromString 是需要在前面添加命名空間的,例如: let clsName = “反射機制.ViewController”

(5)反射重要的目的就是為瞭解耦

(6)可以搜尋“反射機制和Factory 方法”繼續學習反射機制

4.動態獲得命名空間:

4.1 在info.plist中  bundle name 就是命名空間

4.2 info.plist 需要從bundle.main.infoDictionary讀取

4.3 所以命名空間為:Bundle.main.infoDictionary[“CFBundleName”]

4.4 通過寫分類實現代碼精簡:

4.4.1 通過函數調用

4.4.2 通過計算型屬性。這種方法可以增加代碼的可閱讀型。

 

//demo:https://github.com/fushengit/Learn-Swift

 

Swift學習(4懶載入、計算型屬性、反射機制)

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.