在willSet中捕获`self`

时间:2016-04-24 00:35:27

标签: ios swift

如果我有一个集合视图委托helper类,其属性如下所示:

weak var delegate: UICollectionViewDelegate? {
    willSet {
        self.collectionView?.delegate = newValue
    }
}

self块中是否会willSet被捕获?

与其他块不同,您不能在遗嘱设置块上执行[unowned self][weak self]。如果我有collectionView?.delegate =和self.collectionView?.delegate = , deinit was always called, indicating to me that it doesn't make a difference whether or not self`在setter块中使用。

1 个答案:

答案 0 :(得分:3)

它只是一个property observer,而不是一个块,这意味着它不会保留/复制/捕获任何对象,因此您可以安全地使用self

顺便说一下,我会为该变量实现getter和setter,因为你定义它只是为了能够更新collectionView的委托属性:

weak var delegate: UICollectionViewDelegate? {
  get {
    return self.collectionView?.delegate
  }
  set {
    self.collectionView?.delegate = newValue
  }
}