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 的强引用。
我在 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 的强引用。