创建一个空字典,使用[NSMutableDictionary dictionary]还是[[NSMutableDictionary alloc] init]?

20
创建一个空的字典,我应该调用 [NSMutableDictionary dictionary] 还是 [[NSMutableDictionary alloc] init]
它们有什么区别?
4个回答

32

[NSMutableDictionary dictionary]等同于[[[NSMutableDictionary alloc] init] autorelease]


4
谢谢。针对iPhone编程,我认为[[NSMutableDictionary alloc] init]更受青睐。 - Stephen Hsu
5
@Stephen: 为什么你会这样想?当然,在许多情况下,你完成后立即发布可能更好,但你也可以在紧密循环的每n个周期后销毁一个自动释放池来管理内存使用。然而,正如你所说,你的评论太笼统了,不能完全正确。 - Joshua Nozzi

13

为了完整起见,几年后我们找到了另一种分配字典的更短的方式:

NSMutableDictionary* dictionary = @{}.mutableCopy;

1
文档中说:“返回一个与接收器可变复制品不同的新实例。”那我如果只使用@{}呢? - candyline

7

区别在于,如果您使用 NSMutableDictionary* myDictionary = [[NSMutableDictionary alloc] init] ,则在完成后必须调用 [myDictionary release] ,否则将会泄漏内存。如果您使用另一种方法,则无需担心内存管理。


1
使用自动释放实例仍然需要关注内存管理。例如,在紧密循环中创建许多数组而不清空相应的自动释放池,这时就需要考虑内存管理问题。 - Georg Fritzsche

2

使用ARC时,这三个选项没有任何区别:

  1. @{}.mutableCopy
  2. [NSMutableDictionary dictionary]
  3. [[NSMutableDictionary alloc] init]

只有第一个和第二个选项可以根据简洁性或可读性进行证明。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接