[30] 30 天从 Swift 学会 Objective-C:30 天内那些我不懂的部分

这个 30 天我们理解了 C 语言与 Objective-C,然而我其实有不少事情是没有看懂的,铁人赛第 30 天是铁人的终点,却不是学习的最後一天。

Photo by @harrisonhargrave on Unsplash

我不懂的部分

以下是我没有理解清楚而在系列文章中没有特别解释的部分,我写到的部分并不是所有的问题,建议读者持续阅读与学习。

C 语言中我不懂的部分

C 语言有一些部分是我在铁人赛期间看不懂的事情。

  1. Memory layout。
  2. preprocessor 的纪律,什麽可以用,什麽应该有 extern 变数。
  3. C 语言编译器 clang 的优化方式。
  4. C 语言编译器缩短编译时间的练习。
  5. C 语言的标准规格书 C99 的阅读。
  6. C 语言对於 object 名词的定义。(参考 你所不知道的 C 语言:规格书 (PDF) 搜寻 “object”,共出现 735 处 [注 1])
  7. C 语言特殊名词的英文,如 #include 不是念 Number sign、hashtag;& 不是念 and
  8. 记不住 int*int const *int * constint const * const,应该是没有理解 const int * == int const *。[注 2]
  9. GDB: C 语言的 Debugger(或是 LLDB,有使用过 CLI 介面,但是每次用每次查,我猜是因为 Xcode 用习惯的关系)。
  10. 想看完 「你所不知道的 C 语言」系列讲座
  11. 在 pointer 操作如何考虑 Endian [注 3]。

Objective-C 中我不懂的部分

  1. 除了 main 使用 @autoreleasepool
  2. 不知道如何切换ARC 到 MRC,并了解 MRC 的痛点。
  3. 不懂 C++,没有办法练习 Objective-C++(尝试过写 hello world C++,但是没有练习到官方解释的限制)。
  4. 不知道如何用 Swift 介绍 @try@catch@finially

Swift friendly 中我不懂的部分

  1. 不知道如何将@try@catch@finially作为Swift frinedly。
  2. 不知道如何编译 iOS 的 C 语言静态函式库(我原本很天真的用 clang + ar,但是没有那麽简单)。
  3. 不知道 modulemap 的语法与使用方式,在引用静态函式库时遇到看不懂的错误。
  4. 不知道如何解释 swift bridge header 的 recursive include 编译错误 [注 4]。

以上是我不理解与不理解的部分,未来有理解或是有看到不错的文章,会以留言的方式做补充。

注记

  1. 你所不知道的 C 语言: https://hackmd.io/@sysprog/c-standards?type=view#ISOIEC-9899-%E7%B0%A1%E7%A8%B1-%E2%80%9CC99%E2%80%9D
  2. Clockwise_Spiral Rule - David Anderson 1993: http://c-faq.com/decl/spiral.anderson.html
  3. Endianness - Wikipedia:https://en.wikipedia.org/wiki/Endianness
  4. 在 Objective-C 的 framework 内使用 Swift bridge header 时,不可以在 umbrella header 内引用 Swift bridge header,否则无法编译,注意这个错误没有容易理解的错误提示。

後记

感谢读者们的阅读,与 IT 帮提供这次的铁人赛机会。在 2020 年 COVID-19 肆虐的这个年头,有许多事情有了全新的进行方式,而这次铁人赛期间虽然有中秋连假与国庆连假(10/1~10/4, 10/9~10/10),中间边放假休息边挂念铁人赛的完赛机率,真的感觉到压力的影响,也因为连假与压力,体重有不少的提升,这真的是铁人们在完赛後需要面对的另一个课题。
关於在 Day 1 发下的豪语:

透过在 Swift 开发经验,了解 Objective-C 的语言文法、中心思想及适应 Swift 的方法。

希望阅读完系列文章的读者能够告诉我,这 30 天是否可以满足你拥有这样能力。

特别感谢系列文章中有引用到的非官方文章、StackOverflow 上解答的人、为 Open source 留心的人。


<<:  Day30 利用web发送讯息(下)

>>:  Day 30 - 结语

用科学化除错方法替你的 zk 程序除错之二

b. 分析找到的资料并给出一个对根因的假设 在取得资料之後,就要针对这些资料提出一个假设。如果对 Z...

第一次参加社群志工

在台湾,只要是主流的程序语言都会有社群研讨会,像是: JCConf JSDC PyConf Lara...

Day13-stack

function stack,stack 是一种资料结构属於後进先出,如下图记体体空间简单的来说第一...

[Day 19] 还是学不会,再缩小一点 ~ (学习率衰减)

前言 走过了资料分析、演算法选择後, 我们得知了有些可以改善模型的方向: 解决资料不平衡(Done)...

追求JS小姊姊系列 Day8 -- 郑列展现的工具力(下)

前情提要 郑列终於要展现JS喜欢的工具力了吗? 郑列:是说,有人会跟情敌聊这麽久吗? 我:........