我对在Objective-C中分配内存的正确方法感到困惑。假设我有一个NSMutableDictionary。我可以通过两种方式初始化它:
NSMutableDictionary *alpha = [[NSMutableDictionary alloc] init];
或
NSMutableDictionary *alpha = [NSMutableDictionary dictionary];
他们之间有什么区别?我知道第一个为alpha分配内存,但第二个呢?
建议将哪一项作为分配内存的最佳做法?
答案 0 :(得分:5)
[NSMutableDictionary dictionary];
与以下内容完全相同:
[[[NSMutableDictionary alloc] init] autorelease];
它只会为您节省一些打字费用。只要您知道保留对象和自动释放对象之间的区别,您使用哪一个并不重要。如果您正在使用ARC,那么您甚至不需要知道它。
惯例是:
答案 1 :(得分:2)
[NSMutableDictionary dictionary]
是NSMutableDictionary
类的类方法。它包含对alloc
和init
的调用,就像您手动执行调用一样。由于这是一个非常常用的类,它的作者包括了这个所谓的“工厂方法”,以使他/她的班级用户的生活更轻松。
有关此模式的详细信息,请参阅http://en.wikipedia.org/wiki/Factory_method_pattern。
至于哪个是好习惯,恕我直言,你应该使用工厂方法。它使您自己的代码更具可读性并节省您的输入。此外 - 虽然我不确定NSMutableDictionary
是否属于这种情况 - 使用工厂方法使开发人员和您自己的维护更容易,因为它们是e。 G。可以自由更改您将从工厂收到的具体子类实现,而无需更改应用程序代码。
正确地指出了注释,像这样的工厂方法返回自动释放的对象实例,因此如果你只在方法中本地使用它们,则无需从内存管理的角度来担心它们。有关内存管理,自动释放和带有自动引用计数的新ARC运行时的更多详细信息,您应该深入了解Apple关于该主题的文档(如果您还没有)。
答案 2 :(得分:1)
两行都会为alpha分配内存,区别在于第二个alpha是自动释放对象。