Ios 在意志集中捕捉“自我”
如果我有一个集合视图委托帮助器类,其属性如下所示:Ios 在意志集中捕捉“自我”,ios,swift,Ios,Swift,如果我有一个集合视图委托帮助器类,其属性如下所示: weak var delegate: UICollectionViewDelegate? { willSet { self.collectionView?.delegate = newValue } } self是否会在willSet块中被捕获 与其他块不同,您不能在will set块上执行[无主自]或[弱自]。在我有collectionView?.delegate=和self.collectionView?.
weak var delegate: UICollectionViewDelegate? {
willSet {
self.collectionView?.delegate = newValue
}
}
self
是否会在willSet
块中被捕获
与其他块不同,您不能在will set块上执行[无主自]
或[弱自]
。在我有collectionView?.delegate=
和self.collectionView?.delegate=的情况下,总是调用deinit,向我表明在setter块中是否使用self`没有什么区别。它只是一个,不是块,这意味着它不会保留/复制/捕获任何对象,因此您可以在其中安全地使用self
顺便说一下,我将为该变量实现getter和setter,因为您定义它只是为了能够更新collectionView的委托属性:
weak var delegate: UICollectionViewDelegate? {
get {
return self.collectionView?.delegate
}
set {
self.collectionView?.delegate = newValue
}
}
杰出的如果你把这个作为答案,我会接受的。这是一个很好的观点,我一定会这么做。属性观察者规则是否也适用于get
和set
块?是的,它们也适用。它们根本不是块。这就是编译器识别为块之外的独立的语法吗?是的,没错。一个块有一个类型,它是用var
或let
关键字定义的,就像一个正则变量一样。Hi@Ozgur。我看不到您在此处共享的“property observer”链接中的任何文档,这些文档支持您关于这些不是块或未捕获self的说法。尽管如此,我确实相信你,但我希望找到一些支持证据。你还有其他链接吗?