学习笔记24-_objc_init、Objective-C语言局限性、RocketSim、Xcode Bookmarks

93 阅读3分钟

_objc_init

_objc_init 是 Objective-C 运行时系统的一个内部函数,它在应用程序启动时被 dyld(动态链接器)调用,以初始化 Objective-C 运行时环境。这个函数是 Objective-C 运行时的入口点,负责设置运行时系统的核心数据结构和执行必要的初始化操作。 _objc_init 的逻辑如下:

  • environ_init:读取影响运行时的环境变量,如果需要还可以打印环境变量帮助
  • static_init:运行 C++ 静态构造函数
  • runtime_init:分类表的初始化和类表的初始化
  • exception_init: 初始化异常处理系统
  • cache_t::init:类的缓存 cache_t
  • _dyld_objc_register_callbacks: 向 dyld 注册回调通知

Objective-C 语言局限性

Objective-C 是一门古老而又成熟的编程语言,它基于 C 语言,并加入了面向对象的特性。自从 NeXTStep 时代以来,它一直是苹果生态系统中的主要编程语言。然而,随着技术的发展和新语言的出现,Objective-C 也显示出了一些缺陷和局限性。以下是一些被广泛认为的 Objective-C 语言的局限性:

  • 语法复杂性:相比于现代编程语言较为复杂,且使用 [] 来发送消息,可能让新开发者感到困惑
  • 动态性带来的性能问题:消息发送机制的性能与静态语言相比仍有一定的差距
  • 缺少现代编程特性:如可选类型、类型推断、函数式编程特性、元组、模式匹配等
  • 类型系统限制:没有强类型检查,有些问题运行时才会暴露出来
  • ARC(自动引用计数)的局限性:虽然 ARC 大大简化了内存管理,但在某些情况下,它仍然可能导致循环引用和内存泄漏
  • 与 C++ 的兼容性:虽然可以通过 Objective-C++ 来混合使用两种语言,但这通常会带来额外的复杂性和潜在的风险
  • 命名空间问题:不支持命名空间,可能导致类和函数名称冲突,开发者需要通过前缀或其他机制来避免命名冲突

RocketSim

RocketSim 是一个为开发者设计的工具,用于增强 Xcode 模拟器的功能。它提供了一系列实用的功能,帮助开发者更高效地构建和测试应用程序。 主要特点包括:

  • 设计比较:允许开发者将设计图直接放入比较工具中,以验证实现的准确性
  • 网格和标尺:提供网格覆盖和水平和垂直标尺,帮助精确对齐和定位元素
  • 用户默认编辑器:实时编辑标准用户默认设置,便于测试应用程序对用户默认更改的响应
  • 快速操作:为Deep Links和推送通知提供可配置的操作,便于测试
  • 位置模拟:允许模拟单个位置或驾车和步行路线
  • 等等

Xcode Bookmarks

Xcode 书签功能,这是一种在 Xcode 15 中引入的新特性,允许开发者保存代码的重要位置,帮助组织任务和提高工作效率。 Xcode 书签的主要特点包括:

  • 书签导航器:位于 Xcode 左侧的检查器标签视图中,可以添加、删除、复制和重制书签
  • 创建自定义地标描述:可以为代码行添加自定义描述
  • 分组地标:在大型项目中,可以将书签分组,便于管理
  • 添加新书签:可以通过右键目标添加新书签,也可以使用快速操作通过键盘添加
  • 书签搜索查询:除了代码和文件引用,还可以保存搜索查询,便于重用
  • 实用 Xcode 书签作为待办事项列表:可以用书签来管理待办事项,如需编写的测试等

参考文档