2013-02-01 129 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。其他一切都会失败。