问题很简单:当我创建一个新的API或Service Class时,我应该为正在传递的对象创建一个自定义类,或者我应该坚持使用NSDictionary
来简单地保存数据一种键值式的格式。
显然有利有弊,但你们认为哪一个是使用一个而不是另一个的门槛?
NSDictionary
+
没有依赖性
+
非常灵活
+
常用的是
+
内置对NSCoding
的支持
-
结构未定义 - >运行时错误
自定义对象:
+
结构定义
+
属性样访问器:myObject.someProperty
-
可以导致rel。嵌套对象的大量类
更新:jbat100
中包括的评论答案 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];