学习笔记25-Objective-C运行时struct、static_assert、CopilotForXcode、swift-collections

87 阅读3分钟

Objective-C runtime struct

Objective-C runtime 是 Objective-C 语言的核心之一,它负责在运行时执行对象的消息发送机制。其中,有几个关键的 struct,它们共同构成了 Objective-C 的对象模型和运行时系统。以下是一些主要的 struct:

  • objc_object:这是所有对象的基础结构体,它包含了一个 isa 指针,指向对象的类
  • objc_class:这是代表类的结构体,它包含了类的所有信息,如方法列表、属性列表、协议列表和父类等
  • cache_t:这是方法缓存的结构体,用于快速查找方法实现。当方法被调用时,它的实现会被缓存起来,以便下次调用时能够更快地找到
  • method_t:代表方法的结构体
  • ivar_t:代表实例变量的结构体,包含了实例变量的名字和类型编码
  • cateogry_t:代表分类的结构体,包含了分类的对象方法、类方法、协议、属性、类属性等
  • property_t:代表属性的结构体,包含了属性的属性名、属性描述字符串
  • protocol_t:代表协议的结构体,包含了协议的方法列表、属性列表和必需的协议列表

static_assert

static_assert 是 C++11 引入的一个特性,它运行开发者在编译时断言某个条件是否为真。如果断言失败,编译将失败,并显示用户提供的信息。这有助于在编译阶段捕捉一些可能导致程序错误的条件,而不是在运行时才发现。 static_assert 的声明形式如下:

static_assert(condition, message);

static_assert 的示例如下:

typedef unsigned short UnicodeChar;
static_assert(sizeof(UnicodeChar) == 2, "UnicodeChar must be 2 byte length");

CopilotForXcode

CopilotForXcode 是一个为 Xcode 源代码编辑器设计的扩展,它集成了 GitHub Copilot、Codeium 和 ChatGPT。这个扩展利用了这些工具的 AI 功能,为 Xcode 提供代码自动完成和生成的功能。它可以帮助开发者更快地编写代码,提供代码建议,能提高开发效率。

Copilot for Xcode.png

swift-collections

Apple 在 GitHub 上开源了一个名为 swift-collections 的项目,这是一个为 Swift 提供常用数据结构的包。这个包包包含了对多种数据结构的 Swift 实现。

  • BitSet 和 BitArray,动态位集合
  • Deque,由唤醒缓冲区支持的双端队列,双端队列是范围可替换、可变、随机访问的集合
  • 堆,由数组支持的最小堆/最大堆,适合用作优先级队列
  • OrderedSet,标准 Set 的变体,其中 items 的顺序已明确定义,并且 items 可以任意重新排序
  • OrderedDictionary,标准字典的有序变体
  • TreeSet 和 TreeDictionary,实现压缩哈希数组映射前缀树(CHAMP)的持久哈希集合。它们的工作方式与标准的 Set 和 Dictionary 类似,但它们擅长于改变共享副本的场景,能显著提升内存节省和耗时

参考文档