class Person {
var name:String
init(name:String) {
self.name = name
}
//析構函數(shù)
deinit{
print("內(nèi)存已經(jīng)釋放")
}
}
引用計數(shù)為0的時候系統(tǒng)會自動內(nèi)存釋放赤兴,
自動釋放內(nèi)存在遇到強引用循環(huán)的時候不會起作用。
用
week
或者unowned
可破
class Person {
var name: String
var apartement: Apartment?
init(name: String) {
self.name = name
print("person has been initialized")
}
deinit{
print("person has been deIInitalized")
}
}
class Apartment {
let name: String
//week 需要 var與可選型
week var tenant: Person?
//unowned 不需要 不能為空闽瓢!
unowned let place: String
init(name: String) {
self.name = name
print("apartment has been initialized")
}
deinit {
print("apartment has been deinitialized")
}
}
在閉包中使用self
可能會產(chǎn)生強引用循環(huán)姐霍,造成內(nèi)存泄漏
class SmartAirConditioner {
var temperature: Int = 26
var temperatureChange: ((Int) -> () )!
init() {
//捕獲列表
temperatureChange = { [unowned self ] newTemperature in
if abs(newTemperature - self.temperature) >= 10 {
print("abc")
}else {
self.temperature = newTemperature
}
}
}
}