结构体和类
值类型:结构体
、枚举
引用类型:类
使用类,我们可以通过继承来共享代码。
结构体、枚举无法继承
。正好符合swift的面相协议编程
的特性。
5.1值类型(value type)
定义:
将内存存储在栈内(这句我百度的),持有者唯一的类型。
通俗的来说就是:值变量被复制时,本身会被复制,而不是引用被复制。
ps. 这里讲的比较抽象。前面在讲迭代器的时候已经有讲过了。忘却的同学可以回头看看~
使用场景:我们不用关心其生命周期
的优先使用值引用
结构体复制时
,只能改变它自己的复制,这个就叫做值语义 (value semantics)
对于类中的对象来说,它是通过传递引用
来工作了,所以可以有多个持有者。
值引用的优点:不可能存在循环引用!!!
(因为它只有一个持有者) 这个就很酷了,可以在项目中少很多考虑。
5.2可变性
很多bug的起因都是可变性引起的。
Swift 可以让我们在写出安全代码
的同时,保留直观的可变代码的⻛格
///边遍历边操作数组是危险的 这里会崩溃
var mArray:NSMutableArray = [1,2,3,4,5,6,7,8]
for _ in mArray {
mArray.removeAllObjects()
}
///下面是安全的 removeAllObjects方法调用了8次
///因为不论如何移除,数组的迭代器的复制依然持有最 开始的三个元素。
var array:[Int] = [1,2,3,4,5,6,7,8]
for _ in array {
mArray.removeAllObjects()
}
print(mArray.count) //0
网友评论