Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在objective c中,管理类变量/方法内存的正确方法是什么?_Objective C_Memory Management - Fatal编程技术网

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

Objective c 在objective c中,管理类变量/方法内存的正确方法是什么?,objective-c,memory-management,Objective C,Memory Management,我正在学习Objective-C,来自一个垃圾收集的世界。我正在创建一个字典的类(静态)变量,我不确定我是否在内存管理方面做得正确。我使用的是一种方便的方法,因此对象应该自动释放,但我不知道是否需要在类中释放或保留它 我找不到关于如何管理类级对象的清晰文档-请提供任何建议。谢谢 +(NSDictionary*) polygonNames{ NSDictionary* polygonNames = [NSDictionary dictionaryWithObject

我正在学习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;

    }

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

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

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

  • 如果你分配、保留或复制它,你的工作就是发布它。否则就不是了
  • 如果你分配、保留或复制它,你的工作就是发布它。否则就不是了。是的:再读一遍
搜索“经验法则”。因为我不允许添加超链接

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


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

谢谢-这很有帮助。我所关心的是它的“生命”。考虑到它在所有实例中都是静态的,我是否需要释放它,或者在程序结束时“释放”它就足够了。我假设它是在第一次请求类的任何实例时创建的?再次感谢-bIt将一直存在,直到应用程序终止,这是很好的-内存泄漏是唯一的大问题(本身),如果你不释放的东西是分配频繁。对于单例(在内存中只存在一次的东西)来说,不释放它们,而依赖系统释放它使用的少量内存实际上是相当常见的。为了回答第二个问题,这将在第一个请求时分配值。如果您使用的是线程,您可能想看看这里:非常感谢,这些答案非常有用。这段代码没有错,只是每次调用它时它都会创建字典。没有回答您的问题,但是--我看到您将每个多边形的边数存储为字符串。如果你真的想存储一个数字,请将其包装在一个NSNumber中,即[NSNumber numberWithInt:1]等。谢谢你的数字建议,当我仍然认为obj c中的字典键必须是字符串时,快速查看文档和你的评论就可以解决这个问题。