實現步驟如下:
// 1. 定義觀察回調block(觀察者, 觀察鍵值, 舊值, 新值)
// 2. 聲明添加觀察者方法(觀察者, 觀察鍵值, block)
// 3. 聲明刪除觀察者方法(觀察者, 觀察鍵值)
// 4. 創建觀察model: 觀察者, 觀察鍵值, block
// 5. 實現添加觀察者方法:
//1> 獲取系統自動生成的setter方法(沒有則拋出異常)
//2> 獲取當前類和類名
//3> 創建子類 "MMKVOClassPrefix_(className)", 實現class方法, 向runtime註冊該類
//4> 爲之類實現setter方法 (動態綁定)
// 1) 獲取oldValue
// 2) 調用父類的setter方法 對屬性賦值
// 3) 遍歷觀測者數組
// 4) 找到與observer和key對應的model
// 5) 調用其block, 傳入(self, getterName, oldValue, newValue)
//5> 創建觀察model, 存入observer key block
//6> 獲取self的關聯屬性observers數組, 並將新model加入
// 6. 實現移除觀察者方法:
//1> 獲取self的關聯屬性observers數組
//2> 找到與observer和key對應的model, remove