内存

作者: LimChihi | 来源:发表于2016-09-24 15:44 被阅读7次
    class Person {
        var name:String
    
        init(name:String) {
            self.name = name
        }
         //析构函数 
        deinit{
            print("内存已经释放")
        }
    }
    

    引用计数为0的时候系统会自动内存释放,
    自动释放内存在遇到强引用循环的时候不会起作用。

    强引用循环
    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") 
        }
    }
    
    week

    在闭包中使用self可能会产生强引用循环,造成内存泄漏

    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
                }
            
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:内存

          本文链接:https://www.haomeiwen.com/subject/zeyxyttx.html