创建一个常量字典对象

时间:2010-10-04 13:15:03

标签: objective-c release constants nsdictionary

我想完成这篇文章中的内容:Constants in Objective-C

但是,我想构建一个NSDictionary。

如果我这样做:

constants.h

extern NSArray *const mFooKeys;
extern NSArray *const mFooObjects;
extern NSDictionary *const mFooDictionary;

constants.m

NSArray *const mFooKeys = [[NSArray alloc] initWithObjects: 
                                   @"Foo", @"Bar", @"Baz", nil];
NSArray *const mFooObjects = [[NSArray alloc] initWithObjects: 
                                   @"1", @"2", @"3", nil];
NSDictionary *const mFooDictionary = [[NSDictionary alloc] dictionaryWithObjects:mFooObjects 
                                                                         forKeys:mFooKeys]; 

我是以dealloc发布的,一切都很好,还是有更多的东西?这比一个“有问题”的问题更加谨慎,但我觉得如果没有意识到这一点,我真的可能会搞砸了。

2 个答案:

答案 0 :(得分:5)

为了获得基于其他核心数据类型的NSDictionary之类的常量,您需要将其包含在将使用常量的类中,或创建Singleton class并且将NSDictionary存储在那里。只有一些类型在您正在查看的实现中不起作用;您正在寻找的常量代码需要用作对象才能正常工作,但我认为这样做会使目的失败。我不清楚在简单的常量实现中你能做什么和不能做什么的决定因素,但我遇到了同样的问题,而且Singleton设计模式对我来说非常合适。 (无论哪种方式,即使它们在应用程序的生命周期中存在,您也应该dealloc适当。)

答案 1 :(得分:0)

您将这些声明为常量,因此它们是单个对象,将持续应用程序的生命周期。无需发布,因为在应用程序退出之前需要它们。

您不希望以dealloc发布,因为每次释放相关类的实例时都会释放。