一年后重读得物 BuildingClosure 优化
2025 年 4 月,得物技术团队发了一篇文章得物 iOS 启动优化之 Building Closure,讲他们排查到 iOS 启动耗时中 BuildingClosure 阶段的一次诡异暴增。根因不是动态库、不是编译选项、不是打包脚本,而是新增的几个 ObjC 方法名,跟已有符号在 dyld 的完美哈希构造算法里...
2025 年 4 月,得物技术团队发了一篇文章得物 iOS 启动优化之 Building Closure,讲他们排查到 iOS 启动耗时中 BuildingClosure 阶段的一次诡异暴增。根因不是动态库、不是编译选项、不是打包脚本,而是新增的几个 ObjC 方法名,跟已有符号在 dyld 的完美哈希构造算法里...
在 iOS 开发里,没有哪个基础控件能像 UITextField 这样—-表面上代码只有一行,背地里却牵扯到半个操作系统的子模块。它泄漏、它卡顿、它生命周期诡异、它让内存检测工具集体失语。更麻烦的是,这些问题往往不是你代码写错了,而是系统层面组合出的结果。
前段时间和一位做 iOS 开发的朋友聊系统 API 的演进,他提到一个很有共鸣的观点:我们平时用得顺手的 API,即便曾经看起来稳定、安全,官方也可能因为底层优化或实现调整,悄悄改变它的运行语义。ImageIO 就是一个非常典型的例子。
WKWebView 是 iOS 中最重要的网页容器之一。日常开发里,我们通常通过它提供的 API 使用 Web 能力;但一旦遇到请求拦截、Cookie、POST Body、进程通信这类问题,只停留在 API 层往往是不够的,这时就需要进一步理解它背后的 WebKit 架构。
前段时间我阅读了 iOS 26 你的 property 崩了吗? 这篇文章,当时没有太在意。结果这一阵子我自己也遇到了类似的 bug。刚好最近我又重新读了一遍新出的 objc4-950 源码,正好读到这一段,也就顺手从源码的角度来分析一下这个问题,以及到底该怎么处理。
基于 objc4-950 版本。
在 Swift Concurrency 里,actor 很容易和 @MainActor 被混成一件事。表面上看,它们都在处理“并发访问”问题;但如果把两者等同起来,后面几乎一定会写出边界模糊的代码。
这篇文章想聊一个 iOS 系统里非常有意思的空间换时间优化。
objc_msgSend 可以作为符号被重绑定,但真正困难的不是找到它,而是在不破坏 ABI、寄存器现场和返回路径的前提下完成 hook。
这篇文章我想讲的,不只是 Mach-O 长什么样,而是为什么我现在更愿意把它理解成一套跨阶段协议:编译器、链接器、dyld,其实都在围绕同一种文件组织方式协作。
伯阳的网络笔记(十):如何正确的获取 DNS 地址
在不特殊说明是MRC的情况下,默认是ARC。
这篇文章记录 block 的 copy 和 release 过程。
0. 截获自动变量值 block 中,block 表达式截获所使用的自动变量的值,是保存该自动变量的瞬间值。在执行完 block 之后,即使改写 block 中使用的自动变量的值,也不会影响 block 执行时自动变量的值————这就是“截获”的意思;。
1. 简单概述
weak的实现
<!–# strong/retain retain 是在 MRC 时代使用的属性关键字,而 strong 是在 ARC 时代使用的属性关键字。
atomic 一般会被翻译成“原子性”。不过在 @property 这个语境里,没必要把它和物理学里的“原子”扯得太深。对我们来说,更重要的是理解它在 Objective-C 里到底意味着什么:getter/setter 在访问这一层,会额外做同步保护。
0. 前言
前段时间和一位做 iOS 开发的朋友聊系统 API 的演进,他提到一个很有共鸣的观点:我们平时用得顺手的 API,即便曾经看起来稳定、安全,官方也可能因为底层优化或实现调整,悄悄改变它的运行语义。ImageIO 就是一个非常典型的例子。
前段时间我阅读了 iOS 26 你的 property 崩了吗? 这篇文章,当时没有太在意。结果这一阵子我自己也遇到了类似的 bug。刚好最近我又重新读了一遍新出的 objc4-950 源码,正好读到这一段,也就顺手从源码的角度来分析一下这个问题,以及到底该怎么处理。
基于 objc4-950 版本。
这篇文章想聊一个 iOS 系统里非常有意思的空间换时间优化。
objc_msgSend 可以作为符号被重绑定,但真正困难的不是找到它,而是在不破坏 ABI、寄存器现场和返回路径的前提下完成 hook。
在不特殊说明是MRC的情况下,默认是ARC。
这篇文章记录 block 的 copy 和 release 过程。
0. 截获自动变量值 block 中,block 表达式截获所使用的自动变量的值,是保存该自动变量的瞬间值。在执行完 block 之后,即使改写 block 中使用的自动变量的值,也不会影响 block 执行时自动变量的值————这就是“截获”的意思;。
1. 简单概述
weak的实现
<!–# strong/retain retain 是在 MRC 时代使用的属性关键字,而 strong 是在 ARC 时代使用的属性关键字。
atomic 一般会被翻译成“原子性”。不过在 @property 这个语境里,没必要把它和物理学里的“原子”扯得太深。对我们来说,更重要的是理解它在 Objective-C 里到底意味着什么:getter/setter 在访问这一层,会额外做同步保护。
0. 前言
把 Agent 的上下文理解成“聊天记录”,很自然,也很容易把问题看浅。
我最早把 Thought 看得很重。
前两篇写 Planning 和 ReAct 的时候,我其实一直没把问题说到底。
我最早搭 Planning 模式的时候,觉得它比 ReAct 优雅很多。先花一点时间把任务想清楚,拆成步骤,排好依赖,再一条条往下走。不像 ReAct 那样边想边做,每一步都临场拍脑袋。Planning 看起来更有条理,也更可控。
我最早接触 ReAct 的时候,对它的理解很简单。模型先想一下,再调一个工具,拿到结果以后继续往下走。这个循环本身不复杂,真正难的地方,看起来也很明确:提示词怎么写,工具描述怎么给,示例要不要补,输出格式怎么约束。
用过大语言模型 API 的人大概都见过这两个参数——Temperature 和 Top-p。调一下,输出变了;再调一下,又变了。但到底怎么回事,很多人说不清。
2026年2月28日,美以联军对伊朗发动大规模军事袭击,截至3月30日,该地区冲突已持续近一个月。与以往战争中科技仅承担辅助角色不同,人工智能(AI)在此次战事中全程深度参与,既是重塑战场博弈模式的关键变量,其影响也随战事升级逐步渗透至AI产业上下游及全球金融市场。一个月以来,AI与美伊战事相互交织、相互作用,既...
作为一名深耕 iOS 开发多年的老炮,最近一头扎进 Agent 开发领域越挖越上头 —— 本以为堆大模型、调 Prompt 就能搞定落地,结果踩了无数坑才彻底明白:实验室demo跑通不算真本事,千次迭代、复杂扰动下不崩溃、不跑偏,才是生产级Agent的核心门槛。 上周抱着啃经典理论的心态翻钱学森先生的《工程控制论...
很多人第一次接触“大模型缓存命中”,脑子里冒出来的直觉是:模型把上一次的内容记住了。
想象一下:你用了半年 AI 编程助手,代码写得飞快,但是当你突然遇到 bug,但是一时半会无法使用 AI 的时候,会发生什么样的事情?
把 Agent 的上下文理解成“聊天记录”,很自然,也很容易把问题看浅。
我最早把 Thought 看得很重。
前两篇写 Planning 和 ReAct 的时候,我其实一直没把问题说到底。
我最早搭 Planning 模式的时候,觉得它比 ReAct 优雅很多。先花一点时间把任务想清楚,拆成步骤,排好依赖,再一条条往下走。不像 ReAct 那样边想边做,每一步都临场拍脑袋。Planning 看起来更有条理,也更可控。
我最早接触 ReAct 的时候,对它的理解很简单。模型先想一下,再调一个工具,拿到结果以后继续往下走。这个循环本身不复杂,真正难的地方,看起来也很明确:提示词怎么写,工具描述怎么给,示例要不要补,输出格式怎么约束。
用过大语言模型 API 的人大概都见过这两个参数——Temperature 和 Top-p。调一下,输出变了;再调一下,又变了。但到底怎么回事,很多人说不清。
作为一名深耕 iOS 开发多年的老炮,最近一头扎进 Agent 开发领域越挖越上头 —— 本以为堆大模型、调 Prompt 就能搞定落地,结果踩了无数坑才彻底明白:实验室demo跑通不算真本事,千次迭代、复杂扰动下不崩溃、不跑偏,才是生产级Agent的核心门槛。 上周抱着啃经典理论的心态翻钱学森先生的《工程控制论...
很多人第一次接触“大模型缓存命中”,脑子里冒出来的直觉是:模型把上一次的内容记住了。
伯阳的网络笔记(十):如何正确的获取 DNS 地址
HTTPS
前言
0. 前言
1. TCP是什么? 互联网有两个核心协议: IP 和 TCP。IP,即 Internet Protocol(因特网协议)负责联网主机之间的路由选择和寻址;TCP,即 Transmission Control Protocol(传输控制协议)。
1. HTTP/1.x 的问题 不得不说, HTTP/1.1 是一个伟大的协议,现在仍然有非常多的网站使用它,充分说明了它的健壮、巧妙。但是,它毕竟是一个创建于互联网时代前的协议,虽然已经很有预见性了,但是仍然有些过时了。主要有以下几个问题
网络分层 我们都知道,互联网是一个极其复杂的体系,包含了大量的应用程序和协议、各种类型的端系统、分组交换机和各种类型的链路级媒体。为了将这些整理,我们将整个网路进行了抽象分层。
先出几个问题: DNS 是什么?有什么用? DNS 的请求过程是怎么样的。递归查询和迭代查询是什么?有何区别。 DNS 中用到了哪些协议?为什么要用? DNS 有什么缺点。
前段时间我阅读了 iOS 26 你的 property 崩了吗? 这篇文章,当时没有太在意。结果这一阵子我自己也遇到了类似的 bug。刚好最近我又重新读了一遍新出的 objc4-950 源码,正好读到这一段,也就顺手从源码的角度来分析一下这个问题,以及到底该怎么处理。
weak的实现
<!–# strong/retain retain 是在 MRC 时代使用的属性关键字,而 strong 是在 ARC 时代使用的属性关键字。
atomic 一般会被翻译成“原子性”。不过在 @property 这个语境里,没必要把它和物理学里的“原子”扯得太深。对我们来说,更重要的是理解它在 Objective-C 里到底意味着什么:getter/setter 在访问这一层,会额外做同步保护。
0. 前言
基于 objc4-950 版本。
这篇文章想聊一个 iOS 系统里非常有意思的空间换时间优化。
objc_msgSend 可以作为符号被重绑定,但真正困难的不是找到它,而是在不破坏 ABI、寄存器现场和返回路径的前提下完成 hook。
0. 前言
在不特殊说明是MRC的情况下,默认是ARC。
这篇文章记录 block 的 copy 和 release 过程。
0. 截获自动变量值 block 中,block 表达式截获所使用的自动变量的值,是保存该自动变量的瞬间值。在执行完 block 之后,即使改写 block 中使用的自动变量的值,也不会影响 block 执行时自动变量的值————这就是“截获”的意思;。
1. 简单概述
1. HTTP/1.x 的问题 不得不说, HTTP/1.1 是一个伟大的协议,现在仍然有非常多的网站使用它,充分说明了它的健壮、巧妙。但是,它毕竟是一个创建于互联网时代前的协议,虽然已经很有预见性了,但是仍然有些过时了。主要有以下几个问题
网络分层 我们都知道,互联网是一个极其复杂的体系,包含了大量的应用程序和协议、各种类型的端系统、分组交换机和各种类型的链路级媒体。为了将这些整理,我们将整个网路进行了抽象分层。
先出几个问题: DNS 是什么?有什么用? DNS 的请求过程是怎么样的。递归查询和迭代查询是什么?有何区别。 DNS 中用到了哪些协议?为什么要用? DNS 有什么缺点。
在不特殊说明是MRC的情况下,默认是ARC。
weak的实现
伯阳的网络笔记(十):如何正确的获取 DNS 地址
先出几个问题: DNS 是什么?有什么用? DNS 的请求过程是怎么样的。递归查询和迭代查询是什么?有何区别。 DNS 中用到了哪些协议?为什么要用? DNS 有什么缺点。
1. HTTP/1.x 的问题 不得不说, HTTP/1.1 是一个伟大的协议,现在仍然有非常多的网站使用它,充分说明了它的健壮、巧妙。但是,它毕竟是一个创建于互联网时代前的协议,虽然已经很有预见性了,但是仍然有些过时了。主要有以下几个问题
网络分层 我们都知道,互联网是一个极其复杂的体系,包含了大量的应用程序和协议、各种类型的端系统、分组交换机和各种类型的链路级媒体。为了将这些整理,我们将整个网路进行了抽象分层。
0. 前言
1. TCP是什么? 互联网有两个核心协议: IP 和 TCP。IP,即 Internet Protocol(因特网协议)负责联网主机之间的路由选择和寻址;TCP,即 Transmission Control Protocol(传输控制协议)。
HTTPS
前言
HTTPS
前言
HTTPS
前言
这篇文章想聊一个 iOS 系统里非常有意思的空间换时间优化。
objc_msgSend 可以作为符号被重绑定,但真正困难的不是找到它,而是在不破坏 ABI、寄存器现场和返回路径的前提下完成 hook。
前段时间和一位做 iOS 开发的朋友聊系统 API 的演进,他提到一个很有共鸣的观点:我们平时用得顺手的 API,即便曾经看起来稳定、安全,官方也可能因为底层优化或实现调整,悄悄改变它的运行语义。ImageIO 就是一个非常典型的例子。
前段时间我阅读了 iOS 26 你的 property 崩了吗? 这篇文章,当时没有太在意。结果这一阵子我自己也遇到了类似的 bug。刚好最近我又重新读了一遍新出的 objc4-950 源码,正好读到这一段,也就顺手从源码的角度来分析一下这个问题,以及到底该怎么处理。
atomic 一般会被翻译成“原子性”。不过在 @property 这个语境里,没必要把它和物理学里的“原子”扯得太深。对我们来说,更重要的是理解它在 Objective-C 里到底意味着什么:getter/setter 在访问这一层,会额外做同步保护。
<!–# strong/retain retain 是在 MRC 时代使用的属性关键字,而 strong 是在 ARC 时代使用的属性关键字。
0. 截获自动变量值 block 中,block 表达式截获所使用的自动变量的值,是保存该自动变量的瞬间值。在执行完 block 之后,即使改写 block 中使用的自动变量的值,也不会影响 block 执行时自动变量的值————这就是“截获”的意思;。
这篇文章记录 block 的 copy 和 release 过程。
在不特殊说明是MRC的情况下,默认是ARC。
先出几个问题: DNS 是什么?有什么用? DNS 的请求过程是怎么样的。递归查询和迭代查询是什么?有何区别。 DNS 中用到了哪些协议?为什么要用? DNS 有什么缺点。
1. HTTP/1.x 的问题 不得不说, HTTP/1.1 是一个伟大的协议,现在仍然有非常多的网站使用它,充分说明了它的健壮、巧妙。但是,它毕竟是一个创建于互联网时代前的协议,虽然已经很有预见性了,但是仍然有些过时了。主要有以下几个问题
1. TCP是什么? 互联网有两个核心协议: IP 和 TCP。IP,即 Internet Protocol(因特网协议)负责联网主机之间的路由选择和寻址;TCP,即 Transmission Control Protocol(传输控制协议)。
0. 前言
0. 前言
这篇文章我想讲的,不只是 Mach-O 长什么样,而是为什么我现在更愿意把它理解成一套跨阶段协议:编译器、链接器、dyld,其实都在围绕同一种文件组织方式协作。
这篇文章我想讲的,不只是 Mach-O 长什么样,而是为什么我现在更愿意把它理解成一套跨阶段协议:编译器、链接器、dyld,其实都在围绕同一种文件组织方式协作。
这篇文章我想讲的,不只是 Mach-O 长什么样,而是为什么我现在更愿意把它理解成一套跨阶段协议:编译器、链接器、dyld,其实都在围绕同一种文件组织方式协作。
objc_msgSend 可以作为符号被重绑定,但真正困难的不是找到它,而是在不破坏 ABI、寄存器现场和返回路径的前提下完成 hook。
这篇文章想聊一个 iOS 系统里非常有意思的空间换时间优化。
在 Swift Concurrency 里,actor 很容易和 @MainActor 被混成一件事。表面上看,它们都在处理“并发访问”问题;但如果把两者等同起来,后面几乎一定会写出边界模糊的代码。
在 Swift Concurrency 里,actor 很容易和 @MainActor 被混成一件事。表面上看,它们都在处理“并发访问”问题;但如果把两者等同起来,后面几乎一定会写出边界模糊的代码。
WKWebView 是 iOS 中最重要的网页容器之一。日常开发里,我们通常通过它提供的 API 使用 Web 能力;但一旦遇到请求拦截、Cookie、POST Body、进程通信这类问题,只停留在 API 层往往是不够的,这时就需要进一步理解它背后的 WebKit 架构。
WKWebView 是 iOS 中最重要的网页容器之一。日常开发里,我们通常通过它提供的 API 使用 Web 能力;但一旦遇到请求拦截、Cookie、POST Body、进程通信这类问题,只停留在 API 层往往是不够的,这时就需要进一步理解它背后的 WebKit 架构。
想象一下:你用了半年 AI 编程助手,代码写得飞快,但是当你突然遇到 bug,但是一时半会无法使用 AI 的时候,会发生什么样的事情?
想象一下:你用了半年 AI 编程助手,代码写得飞快,但是当你突然遇到 bug,但是一时半会无法使用 AI 的时候,会发生什么样的事情?
作为一名深耕 iOS 开发多年的老炮,最近一头扎进 Agent 开发领域越挖越上头 —— 本以为堆大模型、调 Prompt 就能搞定落地,结果踩了无数坑才彻底明白:实验室demo跑通不算真本事,千次迭代、复杂扰动下不崩溃、不跑偏,才是生产级Agent的核心门槛。 上周抱着啃经典理论的心态翻钱学森先生的《工程控制论...
2026年2月28日,美以联军对伊朗发动大规模军事袭击,截至3月30日,该地区冲突已持续近一个月。与以往战争中科技仅承担辅助角色不同,人工智能(AI)在此次战事中全程深度参与,既是重塑战场博弈模式的关键变量,其影响也随战事升级逐步渗透至AI产业上下游及全球金融市场。一个月以来,AI与美伊战事相互交织、相互作用,既...
2026年2月28日,美以联军对伊朗发动大规模军事袭击,截至3月30日,该地区冲突已持续近一个月。与以往战争中科技仅承担辅助角色不同,人工智能(AI)在此次战事中全程深度参与,既是重塑战场博弈模式的关键变量,其影响也随战事升级逐步渗透至AI产业上下游及全球金融市场。一个月以来,AI与美伊战事相互交织、相互作用,既...
2025 年 4 月,得物技术团队发了一篇文章得物 iOS 启动优化之 Building Closure,讲他们排查到 iOS 启动耗时中 BuildingClosure 阶段的一次诡异暴增。根因不是动态库、不是编译选项、不是打包脚本,而是新增的几个 ObjC 方法名,跟已有符号在 dyld 的完美哈希构造算法里...
2025 年 4 月,得物技术团队发了一篇文章得物 iOS 启动优化之 Building Closure,讲他们排查到 iOS 启动耗时中 BuildingClosure 阶段的一次诡异暴增。根因不是动态库、不是编译选项、不是打包脚本,而是新增的几个 ObjC 方法名,跟已有符号在 dyld 的完美哈希构造算法里...
2025 年 4 月,得物技术团队发了一篇文章得物 iOS 启动优化之 Building Closure,讲他们排查到 iOS 启动耗时中 BuildingClosure 阶段的一次诡异暴增。根因不是动态库、不是编译选项、不是打包脚本,而是新增的几个 ObjC 方法名,跟已有符号在 dyld 的完美哈希构造算法里...
2025 年 4 月,得物技术团队发了一篇文章得物 iOS 启动优化之 Building Closure,讲他们排查到 iOS 启动耗时中 BuildingClosure 阶段的一次诡异暴增。根因不是动态库、不是编译选项、不是打包脚本,而是新增的几个 ObjC 方法名,跟已有符号在 dyld 的完美哈希构造算法里...
2025 年 4 月,得物技术团队发了一篇文章得物 iOS 启动优化之 Building Closure,讲他们排查到 iOS 启动耗时中 BuildingClosure 阶段的一次诡异暴增。根因不是动态库、不是编译选项、不是打包脚本,而是新增的几个 ObjC 方法名,跟已有符号在 dyld 的完美哈希构造算法里...