【发布时间】:2024-05-01 03:55:02
【问题描述】:
在other stack overflow questions 中,强调捕获[weak self] 应该用于不属于该类的闭包,因为self 在闭包完成之前可能为零。当闭包由类本身拥有时,另一种选择是[unowned self]。
我的问题是当我作为参数传递的函数是当前类的实例方法时,我是否需要使用[unowned self]?
示例
import RxSwift
class Person {
var name = "Default name"
class func getPersons() -> Observable<Person> {
// ...
}
}
class MyController: UIViewController {
let disposeBag = DisposeBag()
// I know this right
func unownedDisplayPeople() {
Person.getPersons()
.subscribeNext { [unowned self ] person in
self.displayName(person)
}
.addDisposableToBag(disposeBag)
}
// But what about this?
func whatAboutThisDisplayPeople() {
Person.getPersons()
.subscribeNext(displayName)
.addDisposableToBag(disposeBag)
}
// Or this?
func orThisDisplayPeople() {
Person.getPersons()
.subscribeNext(self.displayName)
.addDisposableToBag(disposeBag)
}
func displayName(person: Person) {
print("Person name is \(person.name)")
}
}
如果我只是传递一个实例方法时仍然需要考虑引用计数,我该怎么做?我把[unowned self]放在哪里?或者当我刚刚通过实例方法时,它是否已经被认为是[unowned self]?
【问题讨论】:
标签: memory swift2 rx-swift retain-cycle retaincount