2013-02-01 127 views
5

我在閱讀Objective-C(一本書呆子牧場書),我不禁想到這個問題:我如何決定哪種集合類型,NSArray或NSDictionary(都帶有或沒有它們的可變子類) ,從URL中讀取內容時使用?NSDictionary VS. NSArray

假設我正在閱讀來自PHP腳本(正在處理的場景)的JSON數據,要使用哪個?我知道在很多參考文獻中都提到它取決於數據結構(即JSON),但是可以概述兩種結構的清晰輪廓?

謝謝大家的幫助:)

回答

2

你想用NSArray當過你有相同類型的對象的集合,並NSDictionary當你有一個對象的屬性。

如果有,可以說包含name,一個phone numberemail一個person對象,你會把它放進一本字典。

這樣做可以使值的順序是隨機的,併爲您提供更可靠的代碼。

如果你想擁有多於一個人,你可以將人物對象放在一個數組中。

這樣做可以讓您迭代用戶對象。

+0

不同意 - 如果您想通過電話號碼查找客戶對象,該怎麼辦?字典中含有同質對象的原因有很多。 –

+0

我會要求你用僞代碼或示例代碼來強調你的觀點,以清楚你的答案 –

+0

@CarlVeazey當然有些情況下你有特定的需求。通過使用數組,您可以創建更通用的後端,從數據庫提取數據併爲您創建JSON。 – EsbenB

10

NSArray基本上只是一個有序的對象集合,可以通過索引訪問。
NSDictionary通過鍵提供對其對象的訪問(通常爲NSStrings,但可以是任何對象類型,如散列表)。

要從通過URL加載的JSON字符串生成對象圖,您可以使用NSJSONSerialization,它會生成一個Objective-C對象結構。結果對象取決於JSON字符串。如果您的JSON中的頂級元素是一個數組(從"["),您將得到一個NSArray。如果頂級元素是一個JSON對象(以"{"開頭),您將獲得一個NSDictionary。

0

「withContentOfURL」或「withContentOfFile」要求URL或文件中的數據符合Cocoa要求的特定格式。 JSON是而不是那種格式。如果您首先使用相同的數據將數據寫入文件或URL,則只能使用這些方法。如果你寫一個NSArray,你可以讀一個NSArray。如果你寫一個NSDictionary,你可以讀一個NSDictionary。其他一切都會失敗。