在 ios開發中,我們經常需要對伺服器的傳回來的json進行解析,特別是對哪些字段特別多的就會又煩躁的情緒。***都是一樣的東西,要為每個property賦值,真是累人啊。舉個簡單的例子吧。伺服器會過來的資料是:
{totalpage:100,page:2,desc:"***x",items:}
這個結構還是蠻簡單的吧。一般我們我們需要2個物件,乙個是result的物件,還有乙個是陣列中的子物件 item
@inte***ce result:nsobject
@end
@inte***ce item:nsobject
在解析的時,一般我是這麼做的
+(result*)resultwithdict:(nsdictory*)dict
//**item的解析類似上面的寫法
在定義inte***ce的時候我們默默的寫了一次屬性名稱,接著我們在解析的時候還要進行無聊的操作。不累嗎。對於簡單的json結構,我們還是可以忍受的,那麼對那些負責的結構呢,苦逼的人民啊!!
好吧進入主題,object c的動態性給我們造福不少,kvc和kvo機制都相當的不錯,必須贊乙個,可以說是完勝了cpp啊。我們使用object 的runtime和kvc機制把我們簡化**。不過這裡有些事情是必須要統一的,那就是屬性的命名規則必須和json的key一致(可以忽略大小寫和_),為啥呢,因為kvc需要這樣子,要不然就會出問題的。
首先,我們要知道自己的object有哪些property 名稱列表了,這樣才好從json的詞典中哪資料啊。下面就是獲取乙個object中的property name list了。
nsarray * getpropertynamelist(id object)
return propertynames;
}
拿到了屬性列表之後,後面就用kvc的機制來搞定吧。
+(result*)resultwithdict:(nsdictory*)dictelse
}@catch (n***ception *exception)
}return result;}
哎呀,貌似這個**比上面的要複雜的多了。哈哈,說的沒有錯。這個**可以用作基類或者對複雜的json結構是相當有用的。不過有一點需要注意的,用這種方式必然會降低效能的,追求效能極致的朋友還是不要用這個方法了。
ios使用kvc機制簡化對json的解析
在 ios開發中,我們經常需要對伺服器的傳回來的json進行解析,特別是對哪些字段特別多的就會又煩躁的情緒。都是一樣的東西,要為每個property賦值,真是累人啊。舉個簡單的例子吧。伺服器會過來的資料是 totalpage 100,page 2,desc x items 這個結構還是蠻簡單的吧。一...
ios使用kvc機制簡化對json的解析
在 ios開發中,我們經常需要對伺服器的傳回來的json進行解析,特別是對哪些字段特別多的就會又煩躁的情緒。都是一樣的東西,要為每個property賦值,真是累人啊。舉個簡單的例子吧。伺服器會過來的資料是 totalpage 100,page 2,desc x items 這個結構還是蠻簡單的吧。一...
KVC的實現機制
kvc和kvo都屬於鍵值程式設計而且底層實現機制都是isa swizzing,所以本來想放在一起講的。但是篇幅有限所以就分成了兩篇博文 kvo實現機制傳送門 kvc概述 kvc是key value coding的簡稱。它是一種可以通過字串的名字 key 來訪問類屬性的機制。而不是通過呼叫setter...