在目标c中管理类变量/方法的内存的正确方法是什么?

时间:2009-05-31 22:06:12

标签: objective-c memory-management

我正在学习Objective-C并且来自垃圾收集的世界。我正在创建一个字典的类(静态)变量,我不确定我是否正确地进行内存管理。我正在使用一种方便的方法,因此对象应该是自动释放的,但我真的不知道我是否需要在课堂上发布或保留它。

我找不到关于如何管理类级别对象的明确文档 - 任何建议都值得赞赏。感谢。

+(NSDictionary*) polygonNames{        
        NSDictionary* polygonNames = [NSDictionary dictionaryWithObjectsAndKeys:
                                      @"Triangle", @"3",
                                      @"Square", @"4",
                                      @"Square", @"4",
                                      @"Pentagon", @"5",
                                      @"Hexagon", @"6",
                                      @"Heptagon", @"7",
                                      @"Octagon", @"8",
                                      @"Nonagon", @"9",
                                      @"Decagon", @"10",
                                      @"Hendecagon", @"11",
                                      @"Dodecagon", @"12",
                                      nil];
        return polygonNames;

    }

2 个答案:

答案 0 :(得分:3)

如果您的数据结构是不可变的并且不会改变,您可以使用 static 变量,如下所示:

+ (NSDictionary *) polygonNames
{
    static NSDictionary *polygonNames = nil;
    if (!polygonNames) polygonNames = [[NSDictionary alloc] initWithObjectsAndKeys:/* objects and keys */];
    return polygonNames;
}

答案 1 :(得分:2)

我可以推荐网站CocoaDev.com。您将在其中找到以下经验法则:

  • 如果你分配,保留或复制它,你的工作就是释放它。否则就不是。
  • 如果你分配,保留或复制它,你的工作就是释放它。否则就不是。是的:再读一遍!

搜索“经验法则”。因为我不允许添加超链接..

基本上所有名为dictionary*array*等的类方法都将返回一个自动释放的对象,您不必保留/释放它。

如需进一步阅读,我可以推荐“内存管理”页面。