18 自动引用计数
2017-07-05 本文已影响33人
猴子的救兵520
工作机制
- Swift和OC一样,采用自动引用计数来管理内容
- 当有一个强引用指向某一个动向时,该对象的引用计数会自动+1
- 当该强引用消失时,引用计数会自动-1
- 当引用计数为0时,该对象会被销毁
循环引用
- 在通常情况下,ARC是会自动帮助我们管理内存的
- 但是在开发中我们经常会出现循环引用的问题,比如下面的示例
- Student对Book对象有一个强引用
- 而Book对Student有一个强引用
- 在两个强指针都指向nil时,两个对象的引用计数依然不为0,依然不会被销毁,就形成了循环引用
// 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
- 解决方案
- swift提供了两种解决方案
- weak : 和OC中的__weak一样是一个弱引用.当指向的对象销毁时,会自动将指针指向nil
- unowned : 和OC中的__unsafe_unretained.当对象销毁时依然指向原来的位置(容易引起野指针)
- swift提供了两种解决方案
// 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
- 系列文章
01 Swift最基本的语法变化
02 Swift中的变量和常量
03 Swift中的数据类型
04 Swift逻辑分支
05 Swift中的循环
06 Switf中的字符串
07 Swift 数组
08 Swift字典
09 Swift 元组
10 Swift 可选类型
11 Swift 类型转化
12 Swift 函数
13 Swift 枚举类型
14 Swift 结构体
15 Swift 类的定义
16 Swift 类的构造函数
17 Swift 类的析构函数
18 自动引用计数
19 Swift 可选链
20 协议
21 闭包
22 Swift 懒加载
23 Swift 注释