class Employee { ① var no : Int var name : String var job : String var salary : Double init(no : Int, name: String, job : String, salary : Double) { ② self.no = no self.name = name self.job = job self.salary = salary println("员工\(name) 已经构造成功。") ③ } deinit { ④ println("员工\(name) 已经析构成功。") ⑤ } } var ref1: Employee? ⑥ var ref2: Employee? ⑦ var ref3: Employee? ⑧ ref1 = Employee(no: 7698, name: "Blake", job :"Salesman", salary : 1600) ⑨ ref2 = ref1 ⑩ ref3 = ref1 ? ref1 = nil ? ref2 = nil ? ref3 = nil ?
上述代码第①行声明了Employee类,第②行代码是定义构造器,在构造器中初始化存储属性,并且在代码第③行输出构造成功信息。第④行代码是定义析构器,并在代码第⑤行输出析构成功信息。
代码第⑥~⑧行是声明3个Employee类型变量,这个时候还没有创建Employee对象分配内存空间。代码第⑨行是真正创建Employee对象分配内存空间,并把对象的引用分配给ref1变量,ref1与对象建立“强引用”关系,“强引用”关系能够保证对象在内存中不被释放,这时候它的引用计数是1。第⑩行代码ref2 = ref1是将对象的引用分配给ref2,ref2也与对象建立“强引用”关系,这时候它的引用计数是2。第?行代码ref3 = ref1是将对象的引用分配给ref3,ref3也与对象建立“强引用”关系,这时候它的引用计数是3。这说明只有在引用计数为0的情况下才调用析构器,释放对象。
欢迎关注智捷iOS课堂微信公共平台
原文:http://blog.csdn.net/tonny_guan/article/details/39058205