使用大括号初始化NSDictionary或使用standard + dictionaryWithObjectsAndKeys:?

时间:2012-09-05 22:06:02

标签: ios nsdictionary

我看到了一个使用@{ value:key }表示法初始化NSDictionary的Apple示例代码。我用+dictionaryWithObjectsAndKeys:

初始化一个常量NSDictionary

我的问题是:

两个生成的NSDictionaries之间有什么区别吗?我是否需要担心内存泄漏?我正在使用ARC。

我所发现的只有Apple doc,但它与Mac有关,而不是iOS。表示法是@{ key = value }而不是@{ value:key }

http://developer.apple.com/legacy/mac/library/documentation/LegacyTechnologies/WebObjects/WebObjects_3.1/DevGuide/WebScript/CreatingObjects.html

第二个问题是:使用此方法将应用程序提交到App Store是安全的,还是将其视为“未记录的API”?

谢谢!

1 个答案:

答案 0 :(得分:6)

  

我用... +dictionaryWithObjectsAndKeys: ...两个生成的NSDictionaries之间有什么区别吗?

编译器使用+[NSDictionary dictionaryWithObjects:forKeys:count:]。所以'gotcha'是你在这些文字表达中使用的参数/值不能是nil。当您使用+[NSDictionary dictionaryWithObjectsAndKeys:]时,输入会在遇到nil时停止。将nil作为文字表达式的键或值传递给文字表达式是错误的。这可能会改变你的程序(因为通过va_lists创建字典的语义是不同的),但更严格的语义可能会导致检测错误,而不是任何东西。

  

我是否需要担心内存泄漏?我正在使用ARC。

在某些情况下,您可能需要自动释放池 - 这取决于您在其中创建的上下文。

  

使用此方法将应用程序提交到App Store是否安全,还是被视为“未记录的API”?

您将需要Apple-Clang 4.0(Xcode 4.4)。它与OS X和iOS的所有版本兼容:

http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/ObjCAvailabilityIndex/_index.html

此处有更多详情:http://clang.llvm.org/docs/ObjectiveCLiterals.html