"strong"关键字的作用是什么?

18

我下载了 Xcode 4.2 开发者预览版,并创建了一个 Cocoa 应用程序。但是我在代理类中发现了一个非常奇怪的语法:

@property (strong) IBOutlet NSWindow *window;

这是什么意思?编译器甚至无法编译它。

提前感谢!


2
我不能告诉你,因为有保密协议,但是,既然你在开发计划中,可以阅读具有ARC版本说明的编程。顺便说一句 - 这就是为什么我们不能拥有好东西的原因。 - Abizern
哇——我在网上找不到关于“strong”的任何信息。它似乎与IBOutlets有关,特别是它们是强引用还是弱引用,但这就是我得到的全部信息。你从编译器那里得到了什么错误消息? - Chris Gregg
4
ARC(自动引用计数)不受保密协议限制,尽管iOS 5和Lion的其他部分都受到保密协议的约束。 - bbum
@bbum - 但是我在评论中提到的参考资料是。 - Abizern
3
ARC文档是公开的,网址为http://clang.llvm.org/docs/AutomaticReferenceCounting.html。但是,阅读起来相当密集(并且对@property的讨论是含蓄的)。`@ property(strong)__strong在实质上是同义词。IBOutlet`的存在是正交的。 - bbum
显示剩余2条评论
2个回答

20

它表示此属性是一种强关系——一种所有权。在此上下文中,这相当于ARCretain关键字版本。

而且编译器甚至无法编译它。

这是有效的ARC代码,因此如果您的工具支持ARC,则肯定应该能够编译它。

确保您使用Xcode 4.2或更高版本,并且将项目的编译器选择设置为Clang(“Apple LLVM Compiler”)。


旁问:如果开发人员仍然需要担心“强”和“弱”引用,那么ARC如何是“自动”的呢?看起来他们所做的只是用更不直观的东西替换了“retain”和“release”。 - aroth
2
@aroth:因为你只需要声明属性是strong、weak(或copying)即可。之后你不需要做任何其他事情:你不需要在dealloc中释放对象,也不需要在分配给实例变量时保证你的引用计数(如果是strong),而且你可以拥有弱引用,当所引用的对象死亡时自动设置为nil。 - Peter Hosey
@aroth:你也不需要担心使用stringWithFormat:还是allocinitWithFormat:;ARC会为你维护内存管理规则,净效果是两者都不会泄漏或导致崩溃。 - Peter Hosey
@aroth:你正在将ARC与哪些替代方案进行比较?你对它有什么期望? - Peter Hosey
@aroth:如果你有一个苹果开发者账户(免费的),我建议观看WWDC 2011会议上名为“介绍自动引用计数”的视频:https://developer.apple.com/videos/wwdc/2011/。它可以很好地概述它的功能、不足和原因。 - Peter Hosey
显示剩余3条评论

3

Strong是指新版LLVM编译器中的自动引用计数(ARC),它将在发布的Xcode 4.2中实现。目前,Xcode 4.2预览版仍然受到保密协议的限制 - 如果您有任何问题,请通过登录您的开发者账户在开发者论坛上发布。

请查看这篇好的博客文章


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