1.初识类与结构体
1)创建struct_Person
struct struct_Person {
var age:Int
var name:String
init(age:Int,name:String){
self.age= age
self.name= name
}
}
2)创建class_Person
classclass_Person: NSObject{
var age:Int
var name:String
init(age:Int,name:String){
self.age= age
self.name= name
}
deinit{
}
}
3)结构体和类的主要相同点有:
1.定义存储值的属性
2. 定义方法
3.定义下标以使用下标语法提供对其值的访问
4. 定义初始化器
5. 使用 extension 来拓展功能
6.遵循协议来提供某种功能
4)主要的不同点有:
1. 类有继承的特性,而结构体没有
2. 类型转换使您能够在运行时检查和解释类实例的类型
3. 类有析构函数用来释放其分配的资源
4. 引用计数允许对一个类实例有多个引用
5)对于类与结构体我们需要区分的第一件事就是:类是引用类型,也就意味着一个类类型的变量并不直接存储具体的实例对象,是对当前存储具体实例内存地址的引用,而结构体是值引用。
类是引用类型 struct是值引用其实引用类型就相当于在线的 Excel ,当我们把这个链接共享给别人的时候,别人的修改我们是能够看到的;值类型就相当于本地的 Excel ,当我们把本地的 Excel 传递给别人的时候,就相当于重新复制了一份给别人,至于他们对于内容的修改我们是无法感知的。
另外引用类型和值类型还有一个最直观的区别就是存储的位置不同:一般情况,值类型存储的在栈上,引用类型存储在堆上。
内存结构结构体在内存当中的分布示意图
结构体在内存中存储类在内存当中的分布示意图
类在内存中存储结论:因为栈和堆在性能上,栈的处理速度更为快捷,所以使用结构体比使用类更节约性能
2.类和结构体的初始化器的不同
类编译器默认不会自动提供成员初始化器,但是对于结构体来说编译器会提供默认的初始化方法(前提是我们自己没有指定初始化器)!
struct会自动提供成员初始化器
网友评论