RunTime實現存儲屬性(本質也是一個計算屬性)
//這么寫是為了保護域空間
private struct AssociatedKeys {
static var isnew = "isnew"
}
var isNew:Bool{
get{
return objc_getAssociatedObject(self, &AssociatedKeys.isnew) as! Bool
}
set{
objc_setAssociatedObject(self, &AssociatedKeys.isnew, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_ASSIGN)
}
}
RunTime實現方法交換
//初始化的時候調用一次
public override class func initialize(){
struct Static {
static var onece:dispatch_once_t = 0
}
dispatch_once(&Static.onece) {//這里需要這么寫
let m1 = #selector(ViewController.viewDidLoad)
let m2 = #selector(ViewController.newViewDidload)
let mm1 = class_getInstanceMethod(type(of: self), m1)
let mm2 = class_getInstanceMethod(type(of: self), m2)
method_exchangeImplementations(mm1, mm2)
}
}
//因為和viewDidload交換了,所以系統會調用這個方法,然后調用自己,就相當于調用原來viewDidload
//一句話就是函數指正的交換,這里可能不是指針交換,而是指針指向內容里面的交換(沒深究)
func ove_viewDidLoad(){
self.ove_viewDidLoad()
print("ove_viewdidLoad")
}
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。