创建一个常量字典对象

7

我希望能够像这篇文章中所做的那样实现一些类似的功能: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个回答

5
为了拥有一个基于其他核心数据类型的类似NSDictionary常量,你需要将其包含在将使用该常量的类中,或者创建一个Singleton类并将NSDictionary存储在其中。在实现中,有一些类类型无法正常工作;您正在查看的常量代码需要用作对象才能正常工作,但我认为这种做法有点违背初衷。我不清楚简单常量实现中可以和不能做什么的决定因素是什么,但我遇到了同样的问题,而单例设计模式对我来说完美地解决了这个问题。(无论哪种方式,您都应该适当地dealloc,即使它们将存在于应用程序的生命周期中。)

0

你正在声明这些为常量,因此它们是单个对象,将持续存在于应用程序的生命周期中。无需释放,因为它们在应用程序退出之前都是必需的。

你不想在dealloc中释放,因为这会在每次相关类的实例被释放时都进行释放。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接