NSDictionary 与自定义对象
Posted
技术标签:
【中文标题】NSDictionary 与自定义对象【英文标题】:NSDictionary vs. custom object 【发布时间】:2011-11-21 09:48:01 【问题描述】:问题很简单:当我创建一个新的 API 或服务类时,我应该为正在传递的对象创建一个自定义类,还是应该坚持使用 NSDictionary
,它只是将数据保存在一个键中-值样式格式。
显然有利有弊,但你们认为使用其中一个的门槛在哪里?
NSDictionary
:
+
无依赖+
非常灵活+
常用+
内置支持NSCoding
-
结构未定义 -> 运行时错误
自定义对象:
+
结构定义+
属性样式访问器:myObject.someProperty
-
可能导致 rel。嵌套对象的大量类
更新:包含来自jbat100的评论
【问题讨论】:
这取决于您的喜好。例如,我总是有一个业务层逻辑 (BLL),通常会制作自定义对象。 【参考方案1】:我通常有一组领域模型,它们更适合 iPhone 开发的 MVC 方法。拥有特定对象还可以让您更轻松地实施类型安全,并且从长远来看还可以降低复杂性。如果你有 NSDictionaries 包含 NSArrays 和更多 NSDictionaries 等来表示你的对象图,它很快就会变得难以管理。
【讨论】:
【参考方案2】:这实际上取决于您期望您的数据模型改变多少。一旦您拥有基于自定义类的数据模型,处理更改可能会很棘手,特别是当您拥有不同版本的模型(在您的应用程序的已发布版本中)的存档(NSCoding 内容)时,您必须非常小心以确保向后兼容性和避免令人讨厌的运行时意外。在这方面,如您所说,基于 NSDictionary 的模型更加灵活。但是,它们不允许自定义类所做的所有自定义检查和行为。此外,自定义类使不熟悉代码的编码人员的数据模型更加明确,根据我的经验,开发人员在处理基于 NSDictionary 的模型时经常会变得草率(尤其是在没有经验的情况下),这可能会很快导致难以理解的混乱,所以如果你失败了路线,做好记录并遵守纪律!
【讨论】:
感谢您提到关于 NSCoding 的观点,我不知道这种情况。我将此添加到赞成和反对的列表中【参考方案3】:如果您需要只读访问并且不需要方法,您可以执行以下操作:
@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];
【讨论】:
创建类别而不是创建自定义类有什么意义?以上是关于NSDictionary 与自定义对象的主要内容,如果未能解决你的问题,请参考以下文章