我想完成这篇文章中的内容: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发布的,一切都很好,还是有更多的东西?这比一个“有问题”的问题更加谨慎,但我觉得如果没有意识到这一点,我真的可能会搞砸了。
答案 0 :(得分:5)
为了获得基于其他核心数据类型的NSDictionary
之类的常量,您需要将其包含在将使用常量的类中,或创建Singleton class并且将NSDictionary
存储在那里。只有一些类型在您正在查看的实现中不起作用;您正在寻找的常量代码需要用作对象才能正常工作,但我认为这样做会使目的失败。我不清楚在简单的常量实现中你能做什么和不能做什么的决定因素,但我遇到了同样的问题,而且Singleton设计模式对我来说非常合适。 (无论哪种方式,即使它们在应用程序的生命周期中存在,您也应该dealloc
适当。)
答案 1 :(得分:0)
您将这些声明为常量,因此它们是单个对象,将持续应用程序的生命周期。无需发布,因为在应用程序退出之前需要它们。
您不希望以dealloc发布,因为每次释放相关类的实例时都会释放。