斯坦福大学iOS8公开课笔记03—自动引用计数(ARC)、static、属性观察器、惰性实例化

来源:互联网 发布:淘宝限时抢购在哪 编辑:程序博客网 时间:2024/06/05 18:50

1) ARC: 类class属于引用类型,传递的是对象的指针,而这些对象存储在堆中,系统会自动管理堆中的这些对象,一旦没有指针指向对象,那么对象会马上被清理掉,这就是自动引用计数机制(ARC)。实例化一个Person的类,指向一个变量John,此时产生一个强引用,令John = nil 使得强引用释放,自动调用deinit析构函数,打印“It is deinitialized”

class Person{    var name: String    init(name: String){        self.name = name    }    deinit{        println("It is deinitialized")    }}var John:Person? = Person(name: "john")John = nil//"It is deinitialized"


2) static:在变量或是方法前加该关键字,表示调用时是类本身,而不是类的实例;调用address变量时,只能用Person类本身,不能用类的实例John来调用

class Person{    var name: String    static var address: String = "BeiJing"    init(name: String,address: String){        self.name = name        Person.address = address    }    deinit{        println("It is deinited")    }}var John = Person(name: "john", address: "FuJian")println("His name is \(John.name)")//"His name is john"println("His address is \(Person.address)")//"His address is FuJian"

3)属性观察器:可以用来监测属性的变化,didSet:在设置新的值之后调用,旧指oldValue,属性变化之后做点什么 ;wilSet,在设置新的值之前调用,新值newValue,属性变化之前做点什么。注意didSet和willSet不会在初识化时调用。

<pre name="code" class="plain">class Person{    var information: String = "00"    var name: String = "11"{        willSet{            self.information = newValue            //name改变为“22”之前,此时newValue = "22",{information "22" name "11"}        }didSet{            self.information = oldValue            //name改变为“22”之后,此时oldValue = "11",{information "11" name "22"}        }    }}let john = Person()//{information "00" name "11"}john.name = "22"//{information "22" name "11"}//{information "11" name "22"}


4)惰性实例化:在var变量前加关键字“lazy”,代表只有在被用到的时候才会初识化,用来处理复杂的初始化依赖,是非常好的特性。

class Person{    lazy var lazyName: String = "00"    var name: String = "11"}let john = Person()//实例化Person,变量lazyName没有被用,所以没有初识化,为nil,变量name直接初始化为“11”//{nil name "11"}john.name//"11"john.lazyName //<span style="font-family: Arial, Helvetica, sans-serif;">变量lazyName被用到,初识化为“00”</span>//"00"



0 0
原创粉丝点击