我想在这里指出一件事,那就是,尽管苹果工程师在他们自己的2015年全球开发者大会视频中说过:
https://developer.apple.com/videos/play/wwdc2015/407/
苹果公司在这个问题上一直在改变主意,这告诉我们这个问题没有唯一的正确答案。为了证明就连苹果的工程师在这个问题上也存在分歧,看看苹果最近的一份报告就知道了
示例代码,你会看到有些人使用weak,有些人不用。
这个Apple Pay的例子使用了weak:
https://developer.apple.com/library/ios/samplecode/Emporium/Listings/Emporium_ProductTableViewController_swift.html#//apple_ref/doc/uid/TP40016175-Emporium_ProductTableViewController_swift-DontLinkElementID_8
下面这个图中图的例子也是如此:
https://developer.apple.com/library/ios/samplecode/AVFoundationPiPPlayer/Listings/AVFoundationPiPPlayer_PlayerViewController_swift.html#//apple_ref/doc/uid/TP40016166-AVFoundationPiPPlayer_PlayerViewController_swift-DontLinkElementID_4
就像Lister的例子一样:
https://developer.apple.com/library/ios/samplecode/Lister/Listings/Lister_ListCell_swift.html#//apple_ref/doc/uid/TP40014701-Lister_ListCell_swift-DontLinkElementID_57
核心位置的例子也是如此:
https://developer.apple.com/library/ios/samplecode/PotLoc/Listings/Potloc_PotlocViewController_swift.html#//apple_ref/doc/uid/TP40016176-Potloc_PotlocViewController_swift-DontLinkElementID_6
视图控制器预览示例如下:
https://developer.apple.com/library/ios/samplecode/ViewControllerPreviews/Listings/Projects_PreviewUsingDelegate_PreviewUsingDelegate_DetailViewController_swift.html#//apple_ref/doc/uid/TP40016546-Projects_PreviewUsingDelegate_PreviewUsingDelegate_DetailViewController_swift-DontLinkElementID_5
HomeKit的例子也是如此:
https://developer.apple.com/library/ios/samplecode/HomeKitCatalog/Listings/HMCatalog_Homes_Action_Sets_ActionSetViewController_swift.html#//apple_ref/doc/uid/TP40015048-HMCatalog_Homes_Action_Sets_ActionSetViewController_swift-DontLinkElementID_23
所有这些都是针对iOS 9完全更新的,并且都使用弱outlet。这个问题并不像有些人想的那么简单。B.苹果一再改变主意,C.你可以用任何让你高兴的东西:)
特别感谢Paul Hudson (www.hackingwithsift.com的作者),他给了我澄清,以及这个答案的参考资料。
我希望这能更好地阐明主题!
当心