在Swift结构体中实现写时复制 | LiJun's Blog
结构体(Struct)在Swift中占有重要地位,在Swift标准库中,大约有90%的公开类型都是结构体,包括我们常用的Array、String、Dictionary。结构体相比类,一个最重要的特性就是它是值类型,而类似引用类型。值类型是通过复制值来赋值的,而不是引用同一个内存地址,这样就不存在数据共享的问题,能防止意外的数据改变,并且它是线程安全的。
举一个很简单的例子,在objc中,数组是类,是引用类型,在Swift中,数组是结构体,是值类型。因此下面的代码中:
123456let array1 = NSMutableArray(array: ["lihua", "liming"])let array2 = array1array1.addObject("xiaowang")array2array1和array2最后都变成了["lihua", "liming", "xiaowang"],也就是array1的改变会导致array2也发生改变,因为它们两个都是引用类型,并且都引用了同一个内存地址。
而在Swift中,就不存在这样的问题:
123456var array3 = [...阅读全文
举一个很简单的例子,在objc中,数组是类,是引用类型,在Swift中,数组是结构体,是值类型。因此下面的代码中:
123456let array1 = NSMutableArray(array: ["lihua", "liming"])let array2 = array1array1.addObject("xiaowang")array2array1和array2最后都变成了["lihua", "liming", "xiaowang"],也就是array1的改变会导致array2也发生改变,因为它们两个都是引用类型,并且都引用了同一个内存地址。
而在Swift中,就不存在这样的问题:
123456var array3 = [...阅读全文