NSDictionary与自定义对象

时间:2011-11-21 09:48:02

标签: iphone objective-c ios nsdictionary nsobject

问题很简单:当我创建一个新的API或Service Class时,我应该为正在传递的对象创建一个自定义类,或者我应该坚持使用NSDictionary来简单地保存数据一种键值式的格式。

显然有利有弊,但你们认为哪一个是使用一个而不是另一个的门槛?

NSDictionary

+没有依赖性 +非常灵活 +常用的是 +内置对NSCoding的支持 -结构未定义 - >运行时错误

自定义对象:

+结构定义
+属性样访问器:myObject.someProperty -可以导致rel。嵌套对象的大量类

更新jbat100

中包括的评论

3 个答案:

答案 0 :(得分:11)

我通常有一组域模型,它们更适合iPhone开发的MVC方法。拥有特定对象还可以使您更容易实施类型安全,并且从长远来看也可以降低复杂性。如果您有包含NSArrays和更多NSDictionaries等的NSDictionaries来表示您的对象图,它很快就会变得无法管理。

答案 1 :(得分:9)

这取决于您对数据模型的预期变化。一旦拥有基于自定义类的数据模型处理更改可能会非常棘手,尤其是当您拥有具有不同版本模型的归档(NSCoding内容)时(在已经发布的应用程序版本中),您必须非常小心以确保向后兼容性和避免令人讨厌的运行时间惊喜。在这方面,基于NSDictionary的模型,正如你所说的更灵活。但是,它们不允许自定义类执行的所有自定义检查和行为。另外自定义类使得数据模型对于不熟悉代码的编码人员更加明确,根据我的经验,开发人员在处理基于NSDictionary的模型时经常会变得草率(特别是在经验不足的情况下),这很快就会导致难以理解的混乱,所以如果你下去那么路线,记录良好,纪律严明!

答案 2 :(得分:4)

如果您只需要访问权限且不需要方法,则可以执行以下操作:

@interface NSDictionary (MyClassCategory)
-(NSString*) someField;
@end

@implementation NSDictionary (MyClassCategory)
-(NSString*) someField {
    return [self objectForKey:@"someField"];
}
@end

typedef NSDictionary MyClass;

并使用它:

 MyClass* myClass = ...;
    NSString* value = [myClass someField];