2025-9月面试题

1.分类和代理添加属性区别
代理添加属性:通常用于管理代理对象的状态或相关信息。代理本身是设计用于通信和事件传递的,不是用于存储数据。你可以在代理类中自由地添加属性,通常是用于管理和传递数据。
分类添加属性:分类不能直接添加存储属性,只能通过 关联对象 来实现模拟属性的效果。分类主要用于扩展已有类的功能,不改变类的本身实现
2.swift throw 和 rethrows区别
特性 throw rethrows
作用 用于函数内部抛出错误 用于函数接受闭包参数,且只有在闭包抛出错误时,才抛出错误
用法 需要 throws 关键字修饰函数,直接抛出错误 需要 rethrows 关键字修饰函数,只有闭包抛出错误时才会抛出错误
调用时机 调用者必须处理错误(使用 try 和 do-catch) 调用时,如果闭包没有抛出错误,就不需要处理错误
是否必须抛出错误 总是抛出错误 仅当传入的闭包抛出错误时才抛出错误

throw 是用于直接抛出错误的关键字。
rethrows 是一个特定的关键字,表示函数接受一个可能抛出错误的闭包,并且函数本身只有在闭包抛出错误时才会抛出错误。
3.swift Actor作用
actor 在 Swift 中的主要作用是 管理并发环境下的共享状态,通过串行化访问来确保数据的一致性和线程安全。它通过自动管理并发访问的排队机制,简化了并发编程中的错误处理,避免了手动管理锁等同步机制,尤其适用于需要保护共享状态的场景。
actor 用于并发编程,保证共享数据的线程安全。
访问 actor 内部数据需要通过异步方法,并使用 await 关键字。
actor 自动确保对其内部数据的串行访问,避免了传统并发编程中的竞态条件。

let counter = Counter()

// 创建多个并发任务
Task {
    await counter.increment()
}

Task {
    await counter.increment()
}

Task {
    let value = await counter.getValue()
    print("Final value: \(value)") // 输出 2
}
  1. Swift 中,AssociatedType 和泛型(Generics) 区别
    泛型:适用于函数、类、结构体等地方,允许你在编写代码时抽象出类型,使用时才指定具体类型。
    关联类型:专门用于协议中,用来在协议中声明占位符类型,具体的类型会在实现协议时确定。


    8d8efaf2-8fb9-4360-a112-d7a8482dcc67.png

    5.CTMentor、URL-Block 和 Protocol-Class 组件化

1.CTMentor 是专为大规模 iOS 应用开发而设计的组件化框架,目标是提高开发过程中的模块化管理和自动化集成。它的主要特点包括:

自动化管理模块依赖:CTMentor 提供自动化的依赖管理,减少手动配置复杂度。
模块解耦:CTMentor 强调模块之间的最小依赖,通过清晰的接口和协议来解耦各个模块。
动态组件加载:它支持在运行时根据需要加载或卸载模块,有助于优化资源管理。
集成测试支持:它还提供了自动化测试功能,确保模块间的兼容性。

  1. URL-Block
    URL-Block 是另一种组件化方式,通常用于网络请求和模块间的导航管理。它的设计思路是将应用中的 URL 请求封装为“URL-Block”形式,从而在不同的模块间共享资源。

通过 URL 处理请求:URL-Block 使用 URL 来标识各个模块的入口,通过动态路由跳转来进行模块间的访问。
模块间隔离:通过 URL 路由,模块之间相对独立,不直接依赖其他模块的实现。
简化跨模块通信:使用 URL 和 Block 作为通信桥梁,减少了各模块间的直接耦合。

  1. Protocol-Class
    Protocol-Class 是通过协议和类来实现组件化的一种设计方式,主要侧重于通过协议来定义模块的接口,类则实现这些协议。

协议定义接口:通过协议定义模块之间的接口,使得模块实现与具体的类解耦。
类实现协议:具体的实现类会遵循协议的要求,完成模块的具体功能。
可插拔设计:因为协议定义了模块之间的接口,不同的类可以替换实现,保证了模块的灵活性和可扩展性。


screenshot-20250904-191736.png

6.RxSwfit
7.响应式和函数式区别
8.OC和Swift混编问题
9.runtime反射
10.为什么oc是动态语言
11.OC对象可以为空吗,还是返回空
12.inout 和 mutating 的区别
13.Swift里的关键字
14.SwiftLint怎么用
15.oc问 反射 和 swift反射
16.combine
二面:
1、问我架构 怎么搭建
2、埋点自己怎么实现
3、问了购物车逻辑,存数据库啊,几个存储方式应用场景,realm数据库,OC就是FMDB
4、tableView优化

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容