1,普通循環(huán)引用解決: 在定義的時候加上weak修飾即可
- unowned修飾也可以解決部分循環(huán)引用那先,但是注意:unowned是不能修飾可選類型的
class Person{
var name: String = ""
var age: Int = 0
var book: Book?
deinit {
print("person---deinit")
}
}
class Book{
var bookName: String = ""
var price: Float = 0
//在下面這個位置進行弱引用即可
weak var owner: Person?
deinit {
print("book----deinit")
}
}
var person: Person? = Person.init()
var book: Book? = Book.init()
//為什么具體類型可以賦值給可選類型务嫡??闯两?
book?.owner = person
person?.book = book
book = nil
person = nil
2俘枫,閉包循環(huán)引用解決:
- 解決循環(huán)引用方法01:weak var weakself = self
weak var weakself = self
httptool.loadData { (jsondata) in
print(jsondata)
weakself?.view.backgroundColor = UIColor.red
}
- 解決循環(huán)引用方法02:(相當(dāng)于第一種方法的簡便寫法)
httptool.loadData { [weak self] (jsondata) in
print(jsondata)
self?.view.backgroundColor = UIColor.red
}
- 解決循環(huán)引用方法03:(相當(dāng)于unratain unsafe腥沽,可能會有僵尸對象的問題),一般不用這
unowned是不能修飾可選類型的,這一點需要注意
httptool.loadData { [unowned self] (jsondata) in
print(jsondata)
self.view.backgroundColor = UIColor.red
}