Objective c 在objective c中,管理类变量/方法内存的正确方法是什么?
我正在学习Objective-C,来自一个垃圾收集的世界。我正在创建一个字典的类(静态)变量,我不确定我是否在内存管理方面做得正确。我使用的是一种方便的方法,因此对象应该自动释放,但我不知道是否需要在类中释放或保留它 我找不到关于如何管理类级对象的清晰文档-请提供任何建议。谢谢Objective c 在objective c中,管理类变量/方法内存的正确方法是什么?,objective-c,memory-management,Objective C,Memory Management,我正在学习Objective-C,来自一个垃圾收集的世界。我正在创建一个字典的类(静态)变量,我不确定我是否在内存管理方面做得正确。我使用的是一种方便的方法,因此对象应该自动释放,但我不知道是否需要在类中释放或保留它 我找不到关于如何管理类级对象的清晰文档-请提供任何建议。谢谢 +(NSDictionary*) polygonNames{ NSDictionary* polygonNames = [NSDictionary dictionaryWithObject
+(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中的字典键必须是字符串时,快速查看文档和你的评论就可以解决这个问题。