runtime常見用法三

問題:

首先我們先來了解一下字典轉模型,當我們從服務器請求并解析完數據后,我們通常需要把解析后得到的字典轉為模型(這里就不討論字典嵌套數組,數組又嵌套字典的情況了),面向模型開發,即有利于代碼的閱讀,編寫代碼時又能避免字典字段無提示的尷尬.
提到字典轉模型,我們通常使用KVC,KVC的底層實現思路是:
1.遍歷解析后的字典中的key,根據key去模型中找與key同名的setter方法,然后把key對應的value賦值給該setter方法對應的屬性
2.如果找不到同名setter方法,則找模型中與key同名的屬性,然后把key對應的value賦值給該屬性
3.如果同名屬性也找不到,就會去找帶下劃線的同名成員變量,然后把value賦值給該成員變量
4.如果連帶下劃線的成員變量也找不到,那么就會報錯了,為了防止報錯,我們通常會實現setvalue:forundifinekey方法.

通過以上介紹,我們知道,KVC會遍歷字典內全部的key,此時我們模型中需要賦值的屬性可能只有三五個,但實際情況模型一般都有十幾個屬性.另外,我們還有實現setvalue:forundifinekey方法以防止找不到同名key.

解決:

如果我們利用runtime,就可以避免這種情況了,runtime是遍歷模型中的屬性,然后去字典中尋找對應的key,然后把value賦值給屬性.
大概思路:
先使用runtime的函數取出模型的成員變量(這里不取屬性,因為有些可能直接聲明成員變量,沒有聲明屬性,而聲明了屬性的話一定會生成成員變量),得到成員變量名稱數組,然后創建一個新的字典,key值為所得到的變量名稱,value為原字典中key所對應的value,,最后再使用KVC即可.

//ivar表示成員變量
//第一個參數表示要獲取哪個類的成員變量列表
//第二個是成員變量的數量,傳入一個指針
class_copyIvarList(<#__unsafe_unretained Class cls#>, <#unsigned int *outCount#>)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 對于從事 iOS 開發人員來說,所有的人都會答出【runtime 是運行時】什么情況下用runtime?大部分人能...
    夢夜繁星閱讀 3,733評論 7 64
  • 轉自:http://www.lxweimin.com/p/dd355fbfa029kvc不經常使用,可能會忘記。轉載...
    BetterComingDay閱讀 691評論 0 1
  • 轉至元數據結尾創建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數據起始第一章:isa和Class一....
    40c0490e5268閱讀 1,776評論 0 9
  • 這夜,如此的漫長, 漫長的望不到邊。 黑夜,寂靜, 是詩人的最愛, 孤獨則是詩人的常態。 縱有面朝大海,春暖花開的...
    清澤閱讀 227評論 7 4
  • 這個城市每天有八百萬個故事在上演,我們的只是其中一個…… 1. 六六和易先生分手已有1年多了。 昨天晚上六六對我說...
    韓世伊揚閱讀 1,019評論 2 2