懶加載、計算型屬性、反射機制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