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

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

1.懶加載:github

目的:1.延遲建立,須要時加載,節省內存空間swift

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

 

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

2.在swift中懶加載的簡單寫法函數

lazy var label:UILabel = UILabel()學習

3.懶加載本質上是一個閉包,完整寫法以下:spa

{}包裝代碼  ()執行代碼code

lazy var labe = {()->UILabel inorm

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)能夠搜索「反射機制和工廠方法」繼續學習反射機制

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

相關文章
相關標籤/搜索