iOS面试相关

1. 基础知识

1.1 属性关键字

  • 属性修饰符使用场景
  • 什么是循环引用?如何避免循环引用?
  • autoreleasepool的原理
  • tips:自动释放池的实质是在开始处调用了autoreleasePoolPush方法,而在结束时调用了autoreleasePoolPop方法。其实push方法的作用是向这个双向链表结构的当前autoreleasePoolPage中插入哨兵对象,pop方法的作用是将插入的哨兵对象后的所有自动释放对象进行release操作。
  • iOS内存分布(代码区/常量区/全局静态区(又分为BSS和Data)/堆区/栈区)
  • tips:栈区由系统进行分配,通常用来存放函数参数、局部变量等数据。在实际开发中,指针变量本身存放在栈中,指向的对象数据会存放在堆中

1.2 Block相关

  • block本质及分类
  • block中使用全局变量/局部变量时的注意事项
  • block中的循环引用

1.3 多线程

1.3.1 多线程原理

  • 同一时间,CPU只能处理一条线程,只有一条线程在执行。
  • 多线程同时执行,其实就是CPU执行快速地在多条线程之间调度(切换)

1.3.2 多线程实现方案

  • GCD:C语言
  • NSOperation:基于GCD(底层是GCD) 比GCD多了一些更简单实用的功能 使用更加面向对象

1.3.3 线程和runloop

  • 一一对应的关系
  • runloop是用来管理线程的。当线程的runloop被开启后,线程会在执行完任务后进入休眠状态,有了任务就会被唤醒去执行任务
  • runloop在第一次获取时被创建,在线程结束时被销毁
  • 对于主线程来说,runloop在程序一启动就默认创建好了。对于子线程来说,runloop是懒加载的——只有当我们使用的时候才会创建。

1.4 持久化存储方式

  • Plist(NSArray\NSDictionary),只存储数组、字典,但是数组和字典里不能有自定义对象。
  • 偏好设置(Preference\NSUserDefaults),也不能存储自定义对象。
  • 归解档,存储自定义对象。
局限:一次性读取和存储操作。
  • SQLite3: 操作数据比较快/可以局部读取/比较小型,占用的内存资源比较少
  • FMDB

2. UIKit

2.1 UIViewController

  • 解释 UIViewController 的生命周期。
  • 介绍常见的 UIViewController 之间的跳转方式。
  • 什么是 UIViewController 的容器视图控制器(Container View Controller)?举例说明。

2.2 UITableView 和 UICollectionView

  • UITableView 和 UICollectionView 有什么区别?
  • 解释 UITableView 的重用机制(Cell Reuse)。
  • 自定义 UITableViewCell 和 UICollectionViewCell 的步骤和常见问题。

2.3 Autolayout 和动画

  • 什么是 Autolayout?在什么情况下使用 Autolayout?
  • 使用 Autolayout 实现自定义视图的步骤。
  • 如何实现平滑的动画效果?列举几种动画实现方式。

3. 数据存储

3.1 CoreData

  • 什么是 CoreData?它与 SQLite 和 UserDefaults 的区别是什么?
  • CoreData 的核心组件是什么?
  • 如何在 iOS 中使用 CoreData 进行数据持久化?

3.2 NSUserDefaults 和 Keychain

  • NSUserDefaults 和 Keychain 分别用于什么场景?
  • 如何安全地存储敏感信息,例如用户密码?

4. 网络和数据解析

4.1 网络通信

  • 在 iOS 中如何进行网络通信?列举常见的网络通信库和框架。
  • 解释 RESTful API 的概念和使用方式。

4.2 JSON 和 Codable

  • 什么是 JSON?如何在 iOS 中解析和生成 JSON 数据?
  • 介绍 Codable 协议和它的作用。

5. 性能优化和调试

  • 如何优化 iOS 应用的性能?
  • 使用什么工具来检测和解决内存泄漏问题?
  • 如何进行性能调试和 Instruments 分析?

6. 其他

  • 什么是 APNs?如何实现远程推送通知?
  • 如何进行版本适配和设备适配?
  • 解释 iOS App 的生命周期。
  • S测试跳转链接