swift - iOS 数据源和导出引用

标签 swift weak-references custom-view retain-cycle

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

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
}


professor said dataSource 属性必须声明为 weak 属性以避免 View 和 View Controller 之间的循环保留。

我的问题是:如果我们将 dataSource 属性声明为 strong,为什么会有一个保留周期?由于 outlet 属性是 weak,是否已经避免了保留周期?

最佳答案

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

  • View controller 强烈引用他的 View 。
  • View Controller 的 View (不是 View Controller )保持对 faceView 的强引用。
  • FaceView 保持对 View Controller 的强引用。

关于swift - iOS 数据源和导出引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29279300/

相关文章:

ios - 错误后重新订阅 Observable

ios - 如何从另一个类观察一个类的属性的变化

java - WeakHashMap 和强引用值

iOS >> Quart Core 'Corner Radius' 不影响自定义 View 中的导航栏

xcode - 将鼠标悬停在 IBOutlets 上可在 Xcode (Swift) 的主 Storyboard 中查找相应的项目

ios - 使用标识符执行Segue

WPF 4.5 : how to remove weak reference caused by binding to an object in order to avoid memory leak

java - 对同一个对象的多个弱引用是否分组清除?

android - 使用 setLayoutParams() 但它不起作用

iphone - NSMutableDictionary 向 objectForKey 抛出 doesNotRecognizeSelector 吗?