IOS面试常见问题解答(2018年9月)第2部分

iOS最新面试题

在本文中,我要向iOS开发人员添加最近问到的新问题,让我们开始吧。

Q1。 什么是NSZombie?

当您的iPhone应用程序因“错误访问”而崩溃时,您将遇到麻烦–内存错误,您试图在已删除的对象上调用方法。 Instruments拥有对NSZombie的支持-通过向您显示导致崩溃的对象的每个分配,保留,释放和自动释放的完整历史记录,可以轻松地找到错误的来源! 哇。

它是内存调试的辅助工具。 具体来说,当您设置NSZombieEnabled时,只要对象达到保留计数0,而不是将其释放,它就会将自身变形为NSZombie实例。 每当此类僵尸收到消息时,它都会记录警告,而不是以无法预测的方式崩溃或行为。 这样,您就可以调试细微的过度发布/自动发布问题,而无需使用高级工具或在干草堆搜索中费尽心思。

这个名称是一个相当明显的玩法,因为当对象达到保留计数0时,它们通常被视为“死”。在这种设置下,它们继续以奇怪的半衰期存在-既没有生命,也没有死亡。 就像真正的僵尸一样,除了它们的大脑吃得更少。

Q2。 什么是线程清理和静态分析?

线程清理程序将帮助您查找数据争用和其他并发错误。

静态分析器已扩展为搜索可定位性问题,检查为空性以及在MRR代码中查找内存泄漏。

Q3。 什么是延期调用? 编写示例代码?

使用libdispatch,计时器的最简单形式是DispatchQueue.asyncAfter 。 这是“延迟调用”的一种形式,它仅延迟函数但不返回引用,因此不提供取消的可能性。

基本的调用after可能看起来像这样:

  DispatchQueue.global()。asyncAfter(最后期限:DispatchTime.now()+ .seconds(10)){ 
//一些延迟的代码
}

Q4。 什么是调度源?

调度源是一种基本数据类型,可协调特定底层系统事件的处理。 大中央调度支持以下类型的调度源:

  • 计时器调度源生成定期通知。
  • UNIX信号到达时, 信号分发源会通知您。
  • 描述符源会通知您各种基于文件和套接字的操作,例如:
  1. 当数据可供读取时
  2. 何时可以写入数据
  3. 在文件系统中删除,移动或重命名文件时
  4. 文件元信息更改时
  • 流程调度源会通知您与流程相关的事件,例如:
  1. 进程退出时
  2. 当进程发出forkexec类型的调用时
  3. 当信号传递到过程时
  • Mach端口调度源会通知您与Mach相关的事件。
  • 自定义调度源是您定义并触发自己的源。

Q5。 什么是应用程序稀疏?

App Store和操作系统通过根据用户特定设备的功能量身定制应用程序交付,从而以最小的占用空间优化了iOS,tvOS和watchOS应用程序的安装。 这种称为应用程序细化的优化,使您可以创建使用最多设备功能,占用最少磁盘空间并容纳Apple可以应用的将来更新的应用程序。 更快的下载速度和更多空间可用于其他应用程序和内容,从而提供更好的用户体验。

切片

切片是为不同目标设备创建和交付应用程序包变体的过程。 变体仅包含目标设备所需的可执行体系结构和资源。 您将继续开发完整版本的应用程序并将其上传到App Store Connect。 App Store将根据您的应用支持的设备创建并提供不同的变体。 使用资产目录,以便App Store可以选择适合每种设备型号的图像,GPU资源和其他数据。 用户安装应用程序时,将下载并安装用户设备的变体。

位码

位码是已编译程序的中间表示。 您上载到App Store Connect的包含位码的应用程序将在App Store上进行编译和链接。 包含位码将使Apple将来可以重新优化您的应用程序二进制文件,而无需向App Store提交新版本的应用程序。

Q6。 告诉我有关dsym的信息,它如何工作以及它是什么?

  1. 当编译器将您的源代码转换为机器代码时,它还会生成调试符号,这些调试符号将已编译二进制文件中的每条机器指令映射回其源代码行。 根据调试信息格式DEBUG_INFORMATION_FORMAT )的构建设置,这些调试符号存储在二进制文件内或随附的调试符号( dSYM )文件中。 默认情况下,应用程序的调试版本将调试符号存储在已编译的二进制文件中,而应用程序的发布版本将调试符号存储在随附的dSYM文件中以减小二进制文件的大小。
    调试符号文件和应用程序二进制文件通过构建UUID在每个构建基础上捆绑在一起。 将为您的应用程序的每个内部版本生成一个新的UUID,并唯一标识该内部版本。 即使使用相同的编译器设置从相同的源代码重建功能相同的可执行文件,它也将具有不同的构建UUID。 来自后续版本的调试符号文件,即使来自相同的源文件,也不会与其他版本的二进制文件互操作。
  2. 当您存档应用程序以进行分发时,Xcode将与一起收集应用程序二进制文件。 dSYM文件并将其存储在主文件夹内的某个位置。 您可以在Xcode Organizer的“ Archived”部分下找到所有已存档的应用程序。 有关创建档案的更多信息,请参阅《 App分发指南》。

转到IOS面试问答(2018年9月)第3部分

希望这对您有帮助,更多问题请查看- 2018年您必须准备的iOS面试主要问题

参考文献:

  1. https://stackoverflow.com/questions/4168327/what-is-nszombie
  2. https://developer.apple.com/videos/play/wwdc2016/412/
  3. https://www.cocoawithlove.com/blog/2016/07/30/timer-problems.html
  4. https://developer.apple.com/library/archive/documentation/General/Conceptual/ConcurrencyProgrammingGuide/GCDWorkQueues/GCDWorkQueues.html
  5. https://help.apple.com/xcode/mac/current/#/devbbdc5ce4f
  6. https://developer.apple.com/library/archive/technotes/tn2151/_index.html