Swift学习- 自动引用计数&&可选链

2018-08-20  本文已影响14人  天下林子

自动引用计数

工作机制

循环引用

// 1.创建类
class Student {
    var book : Book?

    deinit {
        print("Student -- deinit")
    }
}

class Book {
    var owner : Student?

    deinit {
        print("Book -- deinit")
    }
}

// 2.创建对象
var stu : Student? = Student()
var book : Book? = Book()

// 3.相互引用
stu?.book = book
book?.owner = stu

// 4.对象置nil
stu = nil
book = nil
// 1.创建类
class Student {
    weak var book : Book?
    // unowned var book : Book = Book()

    deinit {
        print("Student -- deinit")
    }
}

class Book {
    var owner : Student?

    deinit {
        print("Book -- deinit")
    }
}

// 2.创建对象
var stu : Student? = Student()
var book : Book? = Book()

// 3.相互引用
stu?.book = book!
book?.owner = stu

// 4.对象置nil
stu = nil
book = nil



//: Playground - noun: a place where people can play

import UIKit


class Person {
    var name : String = ""
    var book: Book?
    
    deinit {
        print("Person ---- deinit")
    }
    
}

class Book {
    var price: Double = 0
    
    /*
     OC 中表示弱引用
     __weak/__unsafe_unretained
     
     swift 中弱引用
     weak/unowned(野指针错误)
     */
    //unowned 不能用于修饰可选类型
    unowned var owner : Person = Person()
    
    //var owner: Person?
    
    deinit {
        print("Book ---- deinit")
    }
    
}

//2. 创建两个对象

var person : Person? = Person()
person!.name = "why"

var book : Book? = Book()
book!.price = 89

person!.book = book
book!.owner = person!

//当将person 和book 都置为nil 时,则person对象和book对象还是没有销毁
//如果要销毁,则要一个改为weak

person = nil
book = nil

image.png image.png

可选链

可选连的概念

可选链的示例

// 1.定义类
class Person {
    var name : String
    var dog : Dog?

    init(name : String) {
        self.name = name
    }
}

class Dog {
    var color : UIColor
    var toy : Toy?

    init(color : UIColor) {
        self.color = color
    }

    func runing() {
        print("跑起来")
    }
}

class Toy {
    var price : Double = 0.0
}

// 2.创建对象,并且设置对象之间的关系
// 2.1.创建对象
let person = Person(name: "小明")
let dog = Dog(color: UIColor.yellow)
let toy = Toy()
toy.price = 100.0

// 2.2.设置对象之间的关系
person.dog = dog
dog.toy = toy
let price = person.dog?.toy?.price
print(price) // Optional(100.0)\n
person.dog?.toy = Toy()
person.dog?.runing()

自动引用计数

工作机制

循环引用

// 1.创建类
class Student {
    var book : Book?

    deinit {
        print("Student -- deinit")
    }
}

class Book {
    var owner : Student?

    deinit {
        print("Book -- deinit")
    }
}

// 2.创建对象
var stu : Student? = Student()
var book : Book? = Book()

// 3.相互引用
stu?.book = book
book?.owner = stu

// 4.对象置nil
stu = nil
book = nil
// 1.创建类
class Student {
    weak var book : Book?
    // unowned var book : Book = Book()

    deinit {
        print("Student -- deinit")
    }
}

class Book {
    var owner : Student?

    deinit {
        print("Book -- deinit")
    }
}

// 2.创建对象
var stu : Student? = Student()
var book : Book? = Book()

// 3.相互引用
stu?.book = book!
book?.owner = stu

// 4.对象置nil
stu = nil
book = nil
上一篇 下一篇

猜你喜欢

热点阅读