YYModel源碼閱讀筆記

json 轉 model

一般手動解析的時候,代碼以下:json

Foo *foo = [[Foo alloc] init];

foo.itemID = [dictionary objectForKey:@"id"];
foo.bar = [dictionary objectForKey:@"bar"];
foo.baz = [dictionary objectForKey:@"baz"];
foo.quz = [dictionary objectForKey:@"quz"];複製代碼


手寫的缺點顯而易見緩存

  1. 屬性多的時候,代碼量特別大
  2. 後面的key很容易寫錯,產生bug甚至crash

若是要想實現自動轉換的話,至少要有一下兩點。安全

  1. 要拿到 model的屬性 和 json字段key 的映射關係
  2. 拿到model中全部的屬性,方法。屬性名用來映射成json的key,而後找到對應的value。setter方法用於賦值。

幾點要求:函數

  1. 性能
  2. 安全的類型判斷和轉換
  3. 無入侵

YYModel基本流程



細節點理解

  1. 要想完整的獲取model的class info。必須對類和對象有深入的理解。runtime源碼中對類和對象有完整的定義。runtime提供了函數來獲取class info。從YYModel源碼上能夠看出來一些類對實例變量、方法、屬性、類的結構的封裝。





2. 將model解析成class info以後,將class info緩存到cache中。使用信號量保證緩存線程安全。性能

3. 類型的自動轉換嘗試,賦值時,會先根據value和property info的信息,會嘗試轉換成正確的形式,若是value沒法轉換成property類型,也要保證安全。spa

相關文章
相關標籤/搜索