2023年IOS面试题整理
Madman 数据分析师

基础面试题

swift的基础类型有哪些

Swift是一种强类型语言,支持多种基础类型,这些基础类型包括:

  1. 整型 (Integers): Int、UInt 等。
  2. 浮点型 (Floating-Point Numbers): Double、Float
  3. 布尔型 (Boolean): Bool
  4. 字符串 (String)
  5. 字符 (Character)
  6. 符号字面量 (Literal) : true、false、nil、0、1.23
  7. 元组 (Tuple) : 一组不同类型的数据的组合
  8. 可选型 (Optional) : 用于表示一个变量有值或者没有值
    Swift还支持类和结构体等复杂的数据类型,这些数据类型是由基础数据类型组合而成。

除了基本类型, swift 也支持collection类型,例如 Array,Set,Dictionary。Swift中的集合类型也是基本数据类型, 并且与其他语言比较类似。

在 Swift 中问号(?)的作用是什么?

在 Swift 中,问号 “?” 用于表示可选值 (Optionals)。可选值是一种特殊的类型,表示一个变量可能有值也可能没有值。

使用可选值类型可以有效地避免 null 引用异常 (null reference exception) 。当一个变量是可选值类型时,你必须在使用它之前进行检查。如果它有值,才能使用它,而不会引起程序崩溃。

当赋值给可选值时,如果不加”?” 那么编译器会将这个值包装为可选值类型。

在使用可选值类型之前需要进行取值操作,以确保其有值并且可用.
常用的取值操作如下:

  1. if-letguard-let, 可以检查可选值是否有值并将其分配给一个临时常量或变量。
  2. 强制解析 (force unwrap),使用感叹号 ! 可以直接访问可选值中的值,但如果这个可选值是 nil 则会发生运行时错误。
  3. 隐式解析可选值,使用可选值类型的变量名来访问可选值中的值,如果这个可选值是 nil 则会发生运行时错误。

所以 “?” 是可选类型的标识符,在使用可选值类型时需要根据场景来选择合适的取值操作。

在IOS开发中AppDelegate和SceneDelegate的区别?

在 iOS 13 之前的版本中, AppDelegate 是应用程序的入口点,它处理应用程序的生命周期事件,如启动、挂起、进入后台等。它还负责应用程序级别的任务,如处理远程推送、设置根视图控制器等。

在 iOS 13 及以上版本中, Apple 推出了 SceneDelegate 类来处理应用程序的场景级别事件,如屏幕上的某一场景启动、屏幕上的某一场景挂起等。

主要的差别在于 AppDelegate 主要处理整个应用的生命周期和应用级别的事件,而 SceneDelegate 则主要处理场景(window)级别的事件。
在使用场景的应用中,多场景可以同时存在,每个场景对应一个SceneDelegate,而只有一个AppDelegate,它对应着整个应用程序

因此,在iOS13 及以上系统中,SceneDelegate 是用来管理场景,AppDelegate 继续管理整个应用程序的一些生命周期事件及应用级别的任务,两者各自都起着不同的作用。

在Swift中class和struct的共同点和区别?

Class 和 Struct 是 Swift 中两种基本的数据类型,它们之间有一些共同点和区别。

共同点:

  1. 都可以定义属性 (properties) 和方法 (methods)。

  2. 都可以遵循协议 (protocols)。

  3. 都可以使用类型转换 (type casting)。

  4. 都可以使用扩展 (extensions) 添加新的功能。
    区别:

  5. 不同的创建方式: 结构体是由 struct 关键字创建,类是由 class 关键字创建。

  6. 值类型和引用类型: 结构体是值类型,类是引用类型。结构体在进行赋值和传递时会进行值拷贝,类会进行引用传递。

  7. 继承: 类支持继承,结构体不支持。

  8. deinit: 类有 deinit 方法可以进行清理操作,结构体没有

  9. 通过mutating关键字来修改结构体中的属性,而类可以直接修改。

  10. 根据使用场景来决定是使用类还是结构体,如果需要继承或者在赋值或传递时需要进行引用传递,则使用类;如果需要一个简单的数据类型并且需要在赋值或传递时进行值拷贝,则使用结构体。需要注意的是,结构体和类都是可以使用协议和扩展,协议继承以及类型转换来扩展功能的,而不仅仅限于类.

选择结构体还是类取决于你的项目需求和预期行为。如果不需要继承或者在赋值和传递时需要进行值拷贝,则选择结构体;如果需要继承或者在赋值和传递时需要进行引用传递,则选择类。

架构面试题

什么是依赖注入,依赖注入主要解决什么问题?

依赖注入 (Dependency Injection, DI) 是一种编程范式,通过将依赖关系通过构造函数或其他方式显式地传递给对象来实现,而不是在对象内部通过 new 或者其他方式来创建依赖对象。
使用依赖注入可以有效地降低类之间的耦合度,使得类的实现更加松散,更易于测试和维护。
可以使用依赖注入框架来简化依赖注入的过程,比如Swift-DI,Cleanse,Dip,Injector,Swinject等。

对swift响应式编程的理解,并举例Swift中响应式编程框架有哪些?

响应式编程 (Reactive Programming) 是一种编程范式,它聚焦于对于数据流和变化的响应。在响应式编程中,开发者声明了数据流和转换,而不是编写控制流程来控制数据流。使用响应式编程可以让代码变得更简洁,易于维护和扩展。此外,还可以帮助减少常见的线程问题,如线程安全和高级同步问题。

Swift 中有一些响应式编程框架可供使用,如:

  1. RxSwift: 这是一个用于 Swift 的响应式编程框架,它基于 ReactiveX(Rx)规范实现,提供了一组用于操作数据流和异步操作的操作符。
  2. ReactiveSwift: 一个用于 Swift 的响应式编程框架,提供了一组用于操作数据流和异步操作的函数,并且具有较好的性能。
  3. Bond: 一个轻量级的响应式编程框架,它提供了简单的数据绑定和响应式操作。

Swift中常见的架构模式有哪些,他们的区别是什么

在Swift中MVC、MVVM、MVP是三种常见的软件架构模式。

  1. MVC (Model-View-Controller) 是一种将应用程序的逻辑分成三个部分的设计模式。 Model 代表数据和业务逻辑,View 是用户界面,Controller 则是用来控制 Model 和 View 之间的交互的部分。
  2. MVVM (Model-View-ViewModel) 是一种将应用程序的逻辑分成三个部分的设计模式。Model 代表数据和业务逻辑,View 是用户界面,ViewModel 则是用来控制 Model 和 View 之间的交互的部分。
  3. MVP (Model-View-Presenter) 是一种将应用程序的逻辑分成三个部分的设计模式。 Model 代表数据和业务逻辑,View 是用户界面,Presenter 则是用来控制 Model 和 View 之间的交互的部分。

三种模式基本上相似,但是有一些细微差别,MVC中,controller 作为了view 和 model之间的中间层。而MVP 和 MVVM中 ViewModel和 Presenter 则只是起到中间层和View绑定作用。

Controller 通常负责处理用户交互,解析用户输入并将其转换为操作。它还负责更新用户界面。通常,它会直接更新视图或者调用视图的更新方法。而 ViewModel 主要负责将数据模型转换为可供视图使用的格式,并且处理视图和数据模型之间的交互,进而维护View 状态。简单来说,Controller 主要处理业务逻辑和视图之间的关系,ViewModel 主要处理数据模型和视图之间的关系。

对组件化的理解,Swift中常见的组件化框架有哪些?

组件化框架都可以帮助开发者实现组件化开发,让应用程序的代码更好维护和管理,提高开发效率。不同框架之间可能会有一些区别,比如支持的语言、实现思想、功能特性等,需要根据项目需求和个人喜好进行选择。

除了 BeeHive,还有很多其他类似的组件化框架可供选择,如:

  1. Typhoon: 一个基于 Objective-C 的组件化框架,提供了依赖注入、组件生命周期管理等功能,可以帮助开发者简化应用程序的组件化开发。
  2. YapTaskQueue: 一个用于 Swift 的组件化框架,提供了一组工具,帮助开发者组织和管理应用程序的组件。
  3. JLRoutes: 一个路由框架,可以帮助开发者在组件之间传递数据和调用组件的方法。
  4. Pippin : 一个基于 protocol 的轻量级的组件化框架,提供了路由、组件化、服务等功能。
  5. Router: 一个路由框架,支持解析链接并且根据链接打开相应的组件

算法面试题

逻辑面试题

项目业务能力

效率工具能力

  • 本文标题:2023年IOS面试题整理
  • 本文作者:Madman
  • 创建时间:2023-01-11 15:27:59
  • 本文链接:https://www.patpat.site/开发/前端/2023年IOS面试题整理.html
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论