为什么Xcode5在默认开启ARC的情况下,通过模版创建工程,默认生成的NSWindow的IBOutlet还是assign的呢?

2013-09-29 12:15:30 +08:00
 monkeycz
3803 次点击
所在节点    iDev
6 条回复
zhigang1992
2013-09-29 15:28:49 +08:00
应该是weak吧
monkeycz
2013-09-29 17:24:25 +08:00
@zhigang1992 我现在的版本是Version 5.0 (5A1413),从 New -> Project -> OS X -> Cocoa Application 创建出来的工程,默认窗口的@property就是assign的。
xesique
2013-09-29 18:01:38 +08:00
monkeycz
2013-09-29 19:17:12 +08:00
@xesique 明白了,多谢
monkeycz
2013-09-29 19:26:29 +08:00
@xesique 如果我错误的使用了weak,比如@property (weak) IBOutlet NSWindow *window;,编译器会报错么?
我自己试了一下,可以编译通过。这个是由于编译器没有提示还是OS X 10.8的SDK下没有这个约定了呢?
Apple的这篇文档(https://developer.apple.com/library/mac/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html)里只是说10.7下NSWindow等类不支持weak,没有说之后的系统如何。
xesique
2013-09-29 22:37:06 +08:00
编译器不会报错,如果对象不支持 weak 引用,程序在使用该引用时会崩溃[1][2]。苹果的文章确实只提到了 10.7 系统下面的情况,我估计 10.8 下这些对象可能已经支持了 weak 引用[3]。感觉做两个系统都兼容会比较麻烦……

以上只是在网上搜集的资料,现在手边没有 Mac 无法测试,抱歉。

[1] http://stackoverflow.com/questions/9146540/which-ios-classes-that-dont-support-zeroing-weak-references
[2] http://stackoverflow.com/questions/12386340/if-arc-is-handled-by-the-compiler-why-is-weak-not-supported-on-ios-4-and-mac-os
[3] http://stackoverflow.com/questions/10722238/nswindow-property-set-with-the-assign-attribute-instead-of-the-strong
[4] http://stackoverflow.com/questions/11840728/lion-wont-run-app-built-with-mountain-lion

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/84129

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX