iOS 数据源和出口参考

iOS datasource and outlet references

我在 Youtube 上看了一些 Stanford iOS development classes,我发现了一些我不太清楚的东西。 教授在讲座中讲解了如何创建自定义视图和自定义数据源类,代码如下:

FaceView.swift

protocol FaceViewDataSource: class {
    // some stuff here
}

class FaceView: UIView {

    // some uninteresting properties here

    weak var dataSource: FaceViewDataSource?

    // other stuff here
}


HappinessViewController.swift

class HappinessViewController: UIViewController, FaceViewDataSource {

    @IBOutlet weak var faceView: FaceView!

    // other stuff here
}


dataSource 属性 的 professor said 必须声明为 weak 属性 以避免视图和视图控制器之间的保留循环。

我的问题是:如果我们将 dataSource 属性 声明为强,为什么会有一个保留周期?既然outlet属性是weak,是不是已经避免了retain cycle?

不,不是。请参阅下面的说明。

  • View controller 强烈引用他的视图。
  • 视图控制器的视图(不是视图控制器)保持对 faceView 的强引用。
  • FaceView 保持对 View controller 的强引用。