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

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"



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值