0

我在 Youtube 上查看了一些斯坦福 iOS 开发课程,我发现了一些我不清楚的地方。在讲座中教授解释了如何创建自定义视图和自定义数据源类,代码如下:

FaceView.swift

protocol FaceViewDataSource: class {
    // some stuff here
}

class FaceView: UIView {

    // some uninteresting properties here

    weak var dataSource: FaceViewDataSource?

    // other stuff here
}


幸福视图控制器.swift

class HappinessViewController: UIViewController, FaceViewDataSource {

    @IBOutlet weak var faceView: FaceView!

    // other stuff here
}


教授说,必须 将dataSource属性声明为weak属性,以避免视图和视图控制器之间的保留循环。

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

4

1 回答 1

3

不,这不对。请参阅下面的说明。

  • 视图控制器强烈参考他的视图。
  • 视图控制器的视图(不是视图控制器)保持对 faceView 的强引用。
  • FaceView 保持对 View 控制器的强引用。
于 2015-03-26T13:27:06.157 回答