iOS 类与结构体的区别

作者: A_rcher34 | 来源:发表于2019-04-22 17:58 被阅读6次

swift中,类是引用类型,结构体是值类型。值类型在传递和赋值时将进行复制,而引用类型则只会复制指针。这是两者之间的区别就是两个类型的区别。

举例:

class Temperature {
  var value: Float = 37.0
}

class Person {
  var temp: Temperature?

  func sick() {
    temp?.value = 41.0
  }
}

let A = Person()
let B = Person()
let temp = Temperature()

A.temp = temp
B.temp = temp

执行A.sick()
A与B的temp的值都为41

因为Temperature是class,为引用类型,所以A与B的temp都指向了一个地址。当A的temp修改时,B的temp随之改变。如果Temperature的类型改为struct,就会为值类型,则A与B之间的temp不会相互影响。

内存中,引用类型(例如类)是存在堆上,而值类型(例如结构体)是存在栈上。栈比堆的速度快很多,所以苹果官方推荐使用结构体,可以提高APP运行的效率。

class的功能:

  • class可以被继承,子类可以使用父类的特性和方法
  • 可以被多次引用
  • 由程序员初始化和释放,或者在程序结束时可能被系统回收

struct的功能:

  • 结构较小,适用于复制操作,比一个class的实例被多次引用更加安全
  • 无需担心内存泄露(因为栈区对象出栈后就会被释放)或多线程冲突问题(因为使用时会复制一个新的对象,不会出现多线程操作一个对象的情况)

修改成员变量的方法:

  • 在结构体中,对于要修改成员变量的方法,要用mutating修饰
  • 类中不存在这个问题,因为累可以随意修改自己的成员变量

参考文献

相关文章

  • 第九章 类和结构体

    c++中,结构体是稍有不同的类,类能做的,结构体也可以; 而swift中,结构体与类有较大区别, 结构体与类的区别...

  • 最新iOS开发常见面试题总结一!(附答案)

    1.iOS 类(class)和结构体(struct)有什么区别? Swift 中,类是引用类型,结构体是值类型。值...

  • Swift5 _07_多态原理_初始化

    多态 结构体struct与类class 的区别(1)结构体是值类型、类是引用类型(2)类可以继承,结构体不能继承(...

  • iOS 类与结构体的区别

    swift中,类是引用类型,结构体是值类型。值类型在传递和赋值时将进行复制,而引用类型则只会复制指针。这是两者之间...

  • 结构体和类的一些简单区别

    结构体和类的区别 1.写法区别: 结构体-struct 类-cl...

  • Note 7 类和结构体

    结构体 类 定义 类的属性 成员变量 静态变量 成员方法 类方法 与结构体的区别 用let定义的结构体变量,成员不...

  • 类与结构体探索1-定义、区别、初始化器

    类与结构体的定义 类与结构体定义,除了使用的关键字不同,其他看似相同,但有本质区别。 结构体和类的主要相同点有:定...

  • 面经---依依短租

    1. 结构体、共用体、类 C++中结构体与类的区别: 结构体中的成员访问权限不声明时候默认是 public 的,而...

  • 类与对象一

    1.类与对象 1.1类 1.1.1是结构体的升级,用于定义变量的数据类型1.1.2与结构体的区别1.1.2.1关键...

  • Swift学习

    Swift类与结构体的区别 struct People {var name : Stringinit(name :...

网友评论

    本文标题:iOS 类与结构体的区别

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