美文网首页
Swift中的类和结构体

Swift中的类和结构体

作者: Sherlock_Jim | 来源:发表于2021-12-26 13:20 被阅读0次

    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中的类和结构体

          本文链接:https://www.haomeiwen.com/subject/wjrsqrtx.html