Swift面试基础题
define
define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本
ObjC和Swift混编
概述
随着Xcode 11、Swift 5.0的发布,Swift目前已经实现了ABI稳定及模块稳定,并且Swift runtime
和标准库已经植入系统中,而且苹果新出文档都用Swift,Sample Code也是Swift,可以看出Swift是苹果扶持与研发的重点方向。
对于新App来说,可以直接用纯Swift进行开发,而对于老App来说,绝大部分以前都是用OC开发的,因此Swift/OC混编是一个必然面临的问题。
备忘录(notes) 提醒事项(Reminders) 日历(calendar)
「备忘录」、「提醒事项」和「日历」的功能方向和定位完全不同。
- 「备忘录」倾向于笔记创作和资料收集。兼有基本的待办清单功能。
- 「提醒事项」倾向于待办事项管理。兼有时间标记功能。
- 「日历」倾向于时间规划管理。兼有一部分提醒事项功能。
【译】减少共享内存页
【译】最小化导出的符号
【译】提高代码局部性
提高代码局部性(Improving Locality of Reference)
可以对应用程序性能进行的一个重要改进是减少应用程序在任何给定时间使用的虚拟内存页的数量。这组页面称为工作集,由应用程序代码和运行时数据组成。减少内存中的数据量是算法的一个功能,但是减少内存中的代码量可以通过一个称为分散加载(scatter loading)的过程来实现。这种技术也被称为改进代码引用的局部性(improving the locality of reference of your code)。
通常,方法和函数的编译代码在生成的二进制文件中按源文件组织。分散加载改变了这种组织,而是将相关的方法和函数分组在一起,而不依赖于这些方法和函数的原始位置。这个过程允许内核将活动应用程序最常被引用的可执行页保存在尽可能小的内存空间中。这不仅减少了应用程序的占用空间,还减少了这些页面被换出(paged out)的可能性。
重要提示:您通常应该等到开发周期的晚期才分散应用程序的负载。在开发过程中,代码往往会四处移动,这可能会使先前的分析结果无效。
【译】管理代码大小
【译】Mach-O格式
Mach-O可执行格式概述
Mach-O是OS X中二进制文件的本机可执行格式,是发布代码的首选格式。可执行格式决定二进制文件中的代码和数据读入内存的顺序。代码和数据的顺序影响内存使用和分页活动,因此直接影响程序的性能。
Mach-O二进制文件被组织成段(segments)。每个段包含一个或多个节(sections)。不同类型的代码或数据进入每个节(section)。段总是从页面边界(a page boundary)开始,但节不一定是页对齐的。段的大小是由它所包含的所有节(sections)部分的字节数来衡量的,并四舍五入到(rounded up to)下一个虚拟内存页边界。因此,一个段总是4096字节的倍数,或4千字节,4096字节是最小大小。
Mach-O可执行文件的段和节是根据它们的预期用途命名的。段名称的约定是使用全大写字母,前面加双下划线(例如,__TEXT
);section
名称的约定是使用全小写字母加双下划线(例如,__text
)。
在Mach-O可执行文件中有几个可能的段,但其中只有两个段与性能有关:__TEXT
段和__DATA
段。