Swift中的类和结构体

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会自动提供成员初始化器

你可能感兴趣的:(Swift中的类和结构体)