代码之家  ›  专栏  ›  技术社区  ›  griotspeak

创建常量字典对象

  •  7
  • griotspeak  · 技术社区  · 15 年前

    我想完成一些事情,比如在这篇文章中所做的: Constants in Objective-C

    但是,我想构建一个NSDictionary。

    如果我这样做:

    常数.h

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

    常数.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 回复  |  直到 9 年前
        1
  •  5
  •   Community Mohan Dere    9 年前

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

        2
  •  0
  •   Chris Devereux    15 年前

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

    您不希望在dealloc中释放,因为这将在每次释放相关类的实例时释放。