学计算机的那个

不是我觉到、悟到,你给不了我,给了也拿不住;只有我觉到、悟到,才有可能做到,能做到的才是我的.

0%

概述

随着Xcode 11、Swift 5.0的发布,Swift目前已经实现了ABI稳定及模块稳定,并且Swift runtime和标准库已经植入系统中,而且苹果新出文档都用Swift,Sample Code也是Swift,可以看出Swift是苹果扶持与研发的重点方向。

对于新App来说,可以直接用纯Swift进行开发,而对于老App来说,绝大部分以前都是用OC开发的,因此Swift/OC混编是一个必然面临的问题。

阅读全文 »

「备忘录」、「提醒事项」和「日历」的功能方向和定位完全不同。

  • 「备忘录」倾向于笔记创作和资料收集。兼有基本的待办清单功能。
  • 「提醒事项」倾向于待办事项管理。兼有时间标记功能。
  • 「日历」倾向于时间规划管理。兼有一部分提醒事项功能。
阅读全文 »

减少共享内存页

正如Mach-O可执行格式概述中所述,Mach-O二进制文件的__DATA段中的数据是可写的,因此是可共享的(通过写时复制)。在内存不足的情况下,可写数据会增加可能需要写入磁盘的页数,从而降低分页性能。对于frameworks,可写数据最初是共享的,但有可能被复制到每个进程的内存空间。

减少可执行文件中动态或非常量数据(non-constant)的数量会对性能产生重大影响(significant),特别是对于frameworks。以下章节将向您展示如何减少可执行文件的__DATA段的大小,从而减少共享内存页面的数量。

阅读全文 »

最小化导出的符号

如果您的应用程序或framework具有公共接口,则应该将导出的符号限制为接口所需的符号。导出的符号会占用可执行文件中的空间,应该尽可能减少。这不仅减少了可执行文件的大小,还减少了动态链接器所做的工作量。

默认情况下,Xcode会从项目中导出所有符号。您可以使用下面的信息来识别和删除不想导出的符号。

阅读全文 »

提高代码局部性(Improving Locality of Reference)

可以对应用程序性能进行的一个重要改进是减少应用程序在任何给定时间使用的虚拟内存页的数量。这组页面称为工作集,由应用程序代码和运行时数据组成。减少内存中的数据量是算法的一个功能,但是减少内存中的代码量可以通过一个称为分散加载(scatter loading)的过程来实现。这种技术也被称为改进代码引用的局部性(improving the locality of reference of your code)。

通常,方法和函数的编译代码在生成的二进制文件中按源文件组织。分散加载改变了这种组织,而是将相关的方法和函数分组在一起,而不依赖于这些方法和函数的原始位置。这个过程允许内核将活动应用程序最常被引用的可执行页保存在尽可能小的内存空间中。这不仅减少了应用程序的占用空间,还减少了这些页面被换出(paged out)的可能性。

重要提示:您通常应该等到开发周期的晚期才分散应用程序的负载。在开发过程中,代码往往会四处移动,这可能会使先前的分析结果无效。

阅读全文 »

管理代码大小

GCC编译器支持多种优化代码的选项。根据您的需要,大多数这些技术都会生成更少的代码或更快的代码。在准备软件发布时,您应该尝试使用这些技术,看看哪些技术对您的代码最有利。

阅读全文 »

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

阅读全文 »

关于Core Bluetooth

蓝牙低耗能无线技术(Bluetooth low energy wireless technology)基于蓝牙4.0规范,该规范定义了一组用于低耗能设备之间通信的协议。核心蓝牙框架(The Core Bluetooth framework)是蓝牙低能耗协议栈的抽象。也就是说,它对开发人员隐藏了规范的许多底层细节,使您更容易开发与蓝牙低能耗设备交互的应用程序。

阅读全文 »

Codable 本身就是个类型别名

1
typealias Codable = Decodable & Encodable

代表一个同时符合 DecodableEncodable 协议的类型,即可解码且可编码的类型。

阅读全文 »