IOS面试题——Swift结构体,类,枚举(3)
一 面试题汇总
- 枚举是否可以递归?indirect
- 枚举值原始值和附加值分别是什么?内存占用怎么计算?
- 结构体内存占用如何计算?
- 结构体自定义初始化方法和自动生成的初始化方法有什么关系?
- 结构体能否继承?如果改变property,需要怎么做?mutating
- 类自动生成的初始化方法与结构体自动初始化方法有何区别?
- struct 与 class有什么区别?值类型和引用类型,继承,初始化方法,属性值改变
- 如何给结构体,类,枚举增加subscript下标?subscript可以用来做什么?
二 面试题解答(仅供参考)
2.1 枚举是否可以递归?indirect
1 | 直接递归:Swift 枚举本身不能直接递归。 |
2.2 枚举值原始值和附加值分别是什么?内存占用怎么计算?
1 | 原始值:每个枚举成员有一个固定的常量值,通常是基础数据类型(如 Int、String),内存占用固定。 |
2.3 结构体内存占用如何计算?
1 | 结构体的内存占用取决于以下几个因素: |
2.4 结构体自定义初始化方法和自动生成的初始化方法有什么关系?
1 | 自动生成的初始化方法:在没有自定义初始化方法的情况下,Swift会自动生成一个初始化方法,包含所有存储属性的参数。 |
2.5 结构体能否继承?如果改变property,需要怎么做?mutating
1 | 结构体不能继承,因为它是值类型。 |
2.6 类自动生成的初始化方法与结构体自动初始化方法有何区别?
1 | 结构体: |
2.7 struct 与 class有什么区别?值类型和引用类型,继承,初始化方法,属性值改变
1-总结对比
特性 | 结构体 (struct ) |
类 (class ) |
---|---|---|
类型 | 值类型 | 引用类型 |
继承 | 不支持继承 | 支持继承,且支持方法重写 |
内存管理 | 自动复制(值类型) | 引用计数(ARC)管理内存,可能会产生循环引用 |
构造器 | 自动生成成员初始化方法 | 需要手动定义初始化方法,支持父类初始化方法的调用 |
可变性 | 需要 mutating 关键字才能修改属性 |
可以直接修改属性,引用类型通过引用传递修改属性 |
生命周期 | 超出作用域即销毁 | 由引用计数管理,引用计数为零时销毁 |
2-何时使用
1 | 使用结构体(struct):当你希望使用值类型来避免对象之间的引用共享,尤其是在数据独立的情况下,推荐使用结构体。 |
2.8 如何给结构体,类,枚举增加subscript下标?subscript可以用来做什么?
1 | 你可以为结构体、类和枚举都添加 subscript 来定义自定义的下标访问方式。 |
三 参考
- 简书—Swift结构体,类,枚举