OC/swift 类/结构体

----------- OC ---------

1. 结构体与类的相同点:

a. 都可以将多个数据封装为1个整体。

1.    不同点

a.    结构体只能封装数据,而类还可以封装行为

b.    结构体变量分配在栈空间(如果是是1个局部变量的情况下),而对象分配在堆空间。

                            i.        栈的特点:空间相对较小,但是存储在栈中得数据访问的效率稍高一些

                          ii.        堆的特点:空间的相对较大,但是存储在堆中的数据,效率低一些

                         iii.        存储在栈中得数据访问效率高, 存储在堆中得数据效率低

c. 赋值

            i.     结构体  (拷贝)

           ii.     对象之间 是(地址)

              结构体 Student

       类:   Person

 iii.      

2. 应用场景

a. 如果封装的这个数据,不仅有数据还有方法,只能使用类

b. 如果表示实体,没有行为,光有属性,

            i.     如果属性较少,只有几个的情况下,就定义为结构体,分配在栈,提高运行效率

           ii.     如果属性较多,就不要定义为结构体,因为这样结构体变量会在栈中占据很大一块空间,反而会影响效率

----- swift ----

1.Swift不需要你为自定义类和结构体创建独立的接口和实现文件。在 Swift 中,你在一个文件中定义一个类或者结构体, 则系统将会自动生成面向其他代码的外部接口。
2.类与结构体的对比:
在 Swift 中类和结构体有很多共同之处,它们都能:

  • 定义属性用来存储值;
  • 定义方法用于提供功能;
  • 定义下标脚本用来允许使用下标语法访问值;
  • 定义初始化器用于初始化状态;
  • 可以被扩展来默认所没有的功能;
  • 遵循协议来针对特定类型提供标准功能。

类有而结构体没有的额外功能:

  • 继承允许一个类继承另一个类的特征;
  • 类型转换允许你在运行检查和解释一个类实例的类型;
  • 反初始化器允许一个类实例释放任何其所被分配的资源;
  • 引用计数允许不止一个对类实例的引用。

3.结构体在你的代码中通过复制来传递,并且并不会使用引用计数。

4.定义:无论你在何时定义了一个新的类或者结构体,实际上你定义了一个全新的 Swift 类型。

 

5.初始化器语法最简单的是在类或结构体名字后面接一个空的圆括号,例如 Resolution()或者 VideoMode()。

6.结构体类型的成员初始化器

 

7.结构体和枚举是值类型
值类型是一种当它被指定到常量或者变量,或者被传递给函数时会被拷贝的类型。
Swift 中所有的结构体和枚举都是值类型,这意味着你所创建的任何结构体和枚举实例——和实例作为属性所包含的任意值类型——在代码传递中总是被拷贝的。

8.类是引用类型
相对于拷贝,这里使用的是同一个对现存实例的引用。

9.有时候找出两个常量或者变量是否引用自同一个类实例非常有用,为了允许这样,Swift提供了两个特点运算符:

  • 相同于 ( ===),意味着两个类类型常量或者变量引用自相同的实例;
  • 不相同于( !==)

10.按照通用准则,当符合以下一条或多条情形时应考虑创建一个结构体:

  • 结构体的主要目的是为了封装一些相关的简单数据值;
  • 当你在赋予或者传递结构实例时,有理由需要封装的数据值被拷贝而不是引用;
  • 任何存储在结构体中的属性是值类型,也将被拷贝而不是被引用;
  • 结构体不需要从一个已存在类型继承属性或者行为。

11.字符串,数组和字典的赋值与拷贝行为
Swift 的 String , Array 和 Dictionary类型是作为结构体来实现的,这意味着字符串,数组和字典在它们被赋值到一个新的常量或者变量,亦或者它们本身被传递到一个函数或方法中的时候,其实是传递了拷贝。

12.在上述有关字符串,数组和字典“拷贝”的描述中。你在代码中所见到的行为好像总是拷贝。然而在后台 Swift 只有在需要这么做时才会实际去拷贝。Swift 能够管理所有的值的拷贝来确保最佳的性能,所有你也没必要为了保证最佳性能来避免赋值。

swift:文章转载地址

https://www.jianshu.com/p/e5a8a3fd407d

发布了49 篇原创文章 · 获赞 7 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_29680975/article/details/102699511