美文网首页
3、Swift中struct和class的主要区别

3、Swift中struct和class的主要区别

作者: 龙之天下 | 来源:发表于2025-05-12 11:36 被阅读0次

解释Swift中struct和class的主要区别:

1、存储方式和内存管理:

  • Struct(值类型):

    • 存储在栈内存中
    • 赋值时会复制一份新的数据
    • 数据传递时是值传递
    • 不需要手动管理内存
  • Class(引用类型):

    • 存储在堆内存中
    • 赋值时传递引用
    • 数据传递时是引用传递
    • 需要ARC管理内存

2、继承特性:

  • Struct:

    • 不支持继承
    • 可以遵循多个协议
    • 更适合用于描述简单的数据类型
  • Class:

    • 支持单继承
    • 可以遵循多个协议
    • 更适合用于描述复杂的对象关系

3、初始化方式:

  • Struct:

    • 自动获得成员初始化器
    • 不需要显式写init方法
    • 所有属性必须有初始值
  • Class:

    • 需要手动实现初始化方法
    • 必须显式写init方法
    • 可以使用convenience初始化器

4、可变性:

  • Struct:

    • 需要使用mutating关键字修饰修改自身属性的方法
    • 常量(let)声明后,所有属性都不可修改
  • Class:

    • 不需要特殊关键字就可以修改属性
    • 常量(let)声明后,仍可修改属性(引用不可变)

5、性能特点:

  • Struct:

    • 内存分配在栈上,性能较好
    • 适合小型、简单的数据结构
    • 线程安全(值类型天然线程安全)
  • Class:

    • 内存分配在堆上,性能相对较差
    • 适合大型、复杂的数据结构
    • 需要考虑线程安全问题

6、使用建议:

  • 使用Struct的场景:

    • 简单的数据类型(如Point、Size等)
    • 需要值语义的场景
    • 不需要继承的场景
    • 需要线程安全的场景
  • 使用Class的场景:

    • 需要继承的场景
    • 需要引用语义的场景
    • 需要deinit析构函数的场景
    • 需要共享数据的场景

7、案例

 // Struct示例
struct Point {
    var x: Int
    var y: Int

    mutating func moveBy(x: Int, y: Int) {
        self.x += x
        self.y += y
    }
}

// Class示例
class Person {
    var name: String
    var age: Int

    init(name: String, age: Int) {
      self.name = name
      self.age = age
    }

    func birthday() {
        age += 1
    }
}

8、使用场景对比

// Struct的值类型特性
var point1 = Point(x: 1, y: 1)
var point2 = point1
point2.moveBy(x: 1, y: 1)
print(point1.x) // 输出1,point1不受影响

// Class的引用类型特性
let person1 = Person(name: "张三", age: 20)
let person2 = person1
person2.age = 21
print(person1.age) // 输出21,person1也被修改

相关文章

  • iOS知识点总结(面试向)更新中

    Swift 1.Swift中struct和class的区别 Swift中struct和class有什么不一样的地方...

  • swift我们应该知道的

    1.class 和 struct 的区别? swift中,class是引用类型,struct是值类型。值类型在传递...

  • iOS面试题

    1. struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值...

  • 一些概念的理解

    1. struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值...

  • 答卓同学的iOS面试题

    1. struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值...

  • swift小问题

    1、struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值时...

  • iOS开发NSString的常用方法总结

    1. struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值...

  • Swift理论相关

    类(Class)和结构体(Struct)有什么区别 在swift中,class是引用类型.struct是值类型.值...

  • iOS面试题 - Swift语言

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

  • 面试题二

    Swift 1、Swift中struct和class有什么区别? struct是值引用,更轻量,存放于栈区,cla...

网友评论

      本文标题:3、Swift中struct和class的主要区别

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