翻出十年前自己写的 App,我有点恍惚

举报
lukeme 发表于 2026/10/20 10:06:26 2026/10/20
【摘要】 前几天收拾旧硬盘,翻出一个 2013 年前后写的 iOS 小工具。Swift 还没出,纯 Objective‑C,AutoreleasePool 手写,TableView 的 Cell 复用逻辑自己管,连网络层都是 NSURLConnection那套 delegate 地狱。当时觉得写得挺漂亮,现在看,满屏的 nonatomic retain和嵌套回调,像翻到大学时的日记。本来只想跑起来怀个...

前几天收拾旧硬盘,翻出一个 2013 年前后写的 iOS 小工具。Swift 还没出,纯 Objective‑C,AutoreleasePool 手写,TableView 的 Cell 复用逻辑自己管,连网络层都是 NSURLConnection那套 delegate 地狱。当时觉得写得挺漂亮,现在看,满屏的 nonatomic retain和嵌套回调,像翻到大学时的日记。

本来只想跑起来怀个旧,顺手给这玩意儿加两个现在才有的功能:一个 iCloud 同步,一个小组件快捷操作。想着反正老代码,就当练手,把项目扔给 AI,看它怎么啃。

结果挺冲击的。

我印象里,光把那套老数据模型迁到 NSPersistentCloudKitContainer,再处理冲突合并,当年至少得耗一整天——写迁移映射、测离线覆盖、反复杀进程模拟断网。这次我干了什么?把 CoreData的 model 文件截图贴进去,用自然语言说了句“把 Note entity 接上 CloudKit,保留本地 fallback”,然后看着它把 NSManagedObjectContext的 merge policy、历史跟踪、初始化时序,一坨一坨吐出来。中间只手动改了一处:它默认在主线程 merge 远程事务,老 App 的 UI 会卡,我挪到后台 context,三行。

一个下午,两个功能,能跑,能同步,能上真机。​ 搁 2014 年,这是连着两个周末的活。

说不触动是假的。

最开始那几分钟其实是别扭。它生成 NSFetchedResultsController的 delegate 实现时,我下意识去逐行核对 fetch request 的 predicate 是不是把已删除对象过滤干净了——那个 paranoia(多疑)是当年被脏数据教出来的。盯着看了十几秒,逻辑是对的,甚至比当年我写的更稳,因为它没忘在 controllerDidChangeContent:里包 beginUpdates/endUpdates。那一瞬间的感觉很怪:不是“哇好强”,是“我以前靠疼学会的东西,它上来就会”。

然后才是那道老问题:那我现在算干嘛的?

但真坐下来改那个老工程,答案又没那么虚无。AI 把 80% 的搬砖吃掉了,可它搞不定的,恰好是这项目最脏的角落——

  • 十年前我为了省一次序列化,把富文本存成了自定义 plist 结构,字段名全是缩写(bd= body, ct= createdAt)。AI 不知道哪个缩写对应什么业务语义,只能照抄;是我记得 bd里塞过一段 HTML 转义的黑历史,才告诉它迁移时得先 unescape。

  • 老 App 有个隐藏行为:删除笔记不真删,标记 purgeFlag,七天后清。这个规则没有任何注释,只在 -deleteNote:里一行 obj.purgeFlag = @(YES)。AI 当然不会主动把它映射成 CloudKit 的软删除策略,是我自己想起来的。

  • 小组件的 timeline 刷新,它给的方案在 iOS 17 以下会崩,因为用了 AppIntent的新 API。版本兼容这种事,模型靠训练数据猜,我靠当年被 App Store 拒审三次的记忆。

说白了,AI 读得了代码,读不了我写代码时的犹豫。那些没写进注释、没进 commit message、甚至没进脑内日志的“为什么当初没走另一条路”,才是这次改造里真正值钱的东西。

所以现在我的状态大概是这样:

不怀念一天手写三百行 UI 代码的日子,那确实累,也谈不上多光荣。但我会留一小块地方,偶尔关掉补全,去摸一摸老语言的棱角。不是为了证明什么,是怕哪天 AI 吐出一段看着很顺的并发代码时,我失去那种后背一紧的直觉——知道它可能在锁外读了状态,或者在 dispatch_async里悄悄多 retain 了一次。

十年前写那个 App,我靠编译器和真机 crash 教自己做事。现在编译器变成了会说话的版本。工具变了,但那个最老的活儿没变:你得知道什么时候该信它,什么时候该掀桌。

只是现在“掀桌”的理由,跟之前完全不一样了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。