1

我看到一个使用@{ value:key }符号初始化 NSDictionary 的 Apple 示例代码。我用来初始化一个常量 NSDictionary 使用+dictionaryWithObjectsAndKeys:

我的问题是:

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

我发现的只是这个 Apple 文档,但它与 Mac 相关,而不是 iOS。符号 is@{ key = value }和 not @{ value:key }

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

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

谢谢!

4

1 回答 1

6

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

编译器使用+[NSDictionary dictionaryWithObjects:forKeys:count:]. 所以'问题'是你在这些文字表达式中使用的参数/值不能是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

于 2012-09-05T22:18:19.613 回答