首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
后端
前端
Android
iOS
人工智能
开发工具
代码人生
阅读
5-15.【OC】【Block】为什么 Swift 可以在很多场景下“不写 weak”,而 OC 不行?这是语言能力差异,还是 Runtime 设计差异?
答案是:既是语言能力的进化(编译器更聪明),也是 Runtime 管理机制的代差(更先进的元数据管理)。 在 Objective-C 中,如果你不写 weakSelf,循环引用几乎是“必死”的;但在
5-14.【OC】【Block】Swift 中 [weak self] 和 OC 中 __weak self 在生命周期管理上是否完全等价?
简单来说,它们在最终目的(打破循环引用)上是等价的,但在执行细节和语法语义上,Swift 的 [weak self] 比 OC 的 __weak 走得更远,也更安全。 我们可以从以下三个维度来拆解它们
5-13.【OC】【Block】OC Block 的捕获规则,与 Swift closure 的 capture list 有哪些本质差异?
虽然 Objective-C 的 Block 和 Swift 的 Closure 在逻辑层面上非常相似,但它们的**捕获语义(Capture Semantics)**有着本质的差异。 最根本的区别在于
解决 IntelliJ IDEA 运行 Spring Boot 测试时“命令行过长”错误
解决 IntelliJ IDEA 运行 Spring Boot 测试时“命令行过长”错误 在使用 IntelliJ IDEA 开发 Spring Boot 项目时,不少开发者会遇到一个令人头疼的问题:
5-12.【OC】【Block】__weak typeof(self) weakSelf = self; 这行代码在 ARC 下编译器实际插入了什么逻辑?
在 ARC 环境下,这一行看似简单的赋值,背后其实是一套复杂的弱引用表(Weak Table)管理逻辑。编译器并不会把它当作普通的指针赋值,而是会将其转化为对 Runtime 函数的调用。 具体来说,
a16z 领投 AI 伴侣 Shizuku AI:让社区参与 AI 角色成长;夸克 AI 眼镜新增直播功能丨日报
在 VSSFlow 问世之前,行业内的模型往往存在严重的偏科现象:视频转声音模型(V2S)难以生成清晰的语音,而文本转语音模型(TTS)又无法处理复杂的环境噪音。
5-11.【OC】【Block】self 是在什么时候被 retain 的?self.block = ^{ [self doSomething]; };
在 ARC 环境下,self 被 retain 的时机并不是在 Block 执行的时候,而是在 Block 创建并拷贝到堆上的那一刻。 我们可以把这个过程拆解为以下几个精确的步骤: 1. 核心触发时机
详解JS的?.(可选链操作符)和 ??(空值合并操作符)
本文讲解 JavaScript中可选链 (?.) 和空值合并 (??) 的用法,前者安全访问嵌套属性避免报错,后者按照msg→message→error.message优先级提取错误信息,提升代码健康
5-10.【OC】【Block】为什么在 OC 中 weakSelf 几乎是必须的?哪些场景下不用 weak 也不会循环引用?
在 Objective-C 中,weakSelf 的存在感之所以这么强,本质上是因为 Objective-C 的闭包(Block)是一等公民,且默认执行的是强引用捕获。 1. 为什么 weakSelf
5-9.【OC】【Block】Block 捕获 self 的真实语义是什么?
在 Objective-C 中,Block 捕获 self 的真实语义可以概括为一句话:它在 Block 的结构体内部创建了一个强引用指针,指向了 self 所代表的对象。 这里有三个核心层面的含义,
5-8.【OC】【Block】Block 的内存布局中,至少包含哪些关键字段?
从底层 C 语言的定义来看,Block 的本质是一个结构体。无论它是哪种类型的 Block,其内存布局的首部都遵循统一的规范(通常被称为 Block_layout)。 以下是 Block 内存布局中最
5-7.【OC】【Block】__block 变量在 Stack → Heap 的迁移过程中,发生了什么变化?
这是一个非常硬核的内存迁移过程。当 Block 从栈拷贝到堆时,__block 变量并不是简单地“移动”,而是一场坐标转换和关系重定位。 我们可以把这个过程拆解为三个关键动作: 1. 结构体的“克隆”
5-6.【OC】【Block】__block 修饰符的底层原理是什么?
简单来说,__block 修饰符的作用是**“将一个栈上的变量包装成一个对象”**,从而让它能够随着 Block 一起被拷贝到堆上,实现跨作用域的读写访问。 如果不加 __block,Block 捕获
5-5.【OC】【Block】Block_copy / [block copy] 在 ARC 下是否还“真的有用”?
这是一个非常敏锐的问题。在 ARC(自动引用计数) 几乎接管了一切的今天,手动调用 Block_copy 或 [block copy] 的场景确实极度萎缩,但它并没有完全“退役”。 简单直接的回答是:
5-4.【OC】【Block】Block 从 Stack copy 到 Heap 的触发时机有哪些?至少说出 3 种。
在 ARC(自动引用计数)环境下,编译器为了保证程序的安全性,会非常频繁地自动将 Block 从栈(Stack)拷贝到堆(Heap)上。一旦拷贝到堆,Block 的生命周期就不再受限于当前作用域,而是
5-3.【OC】【Block】Stack Block 为什么不能跨作用域使用?它的生命周期是如何结束的?
简单来说,Stack Block(栈上的 Block) 最大的局限性在于它的生命周期是与它所在的函数或作用域(Scope) 强绑定的。 在 Objective-C 中,Block 本质上是一个对象,但
5-2.【OC】【Block】如何通过代码特征快速判断一个 Block 属于哪种类型?
✅「肉眼 + 编译器语义」判断法 这是苹果工程师自己用的方式。 一、先给结论(99% 场景适用) 你只需要看三件事: 🥇 是否捕获任何外部变量? ❌ 没有捕获: 👉 必然是: ✅ Global Blo
5-1.【OC】【Block】OC 中为什么会有 Global / Stack / Heap 三种 Block?它们诞生的历史原因是什么?
这是个**非常底层 + 很“历史包袱感”**的问题 ——Block 之所以看起来怪(Global / Stack / Heap 三种),本质不是设计优雅,而是: 一、最初:Block 不是 OC 发明
我是如何把 API 响应时间从 200ms 压到了 10ms
少年呀,当你遇到这样的情况:API 慢得像蜗牛,P95 延迟超高,服务器在凌晨 3 点因为流量突发而崩溃,你是选择花三个月用 Rust 重写所有东西,还是选择看着用户流失呢。
自定义脚本修改响应,从观看数据到修改数据的调试
本文围绕自定义脚本修改响应的实际调试需求,从代理抓包的前提条件出发,详细拆解了在代理模式下如何通过拦截器脚本自动修改接口响应
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30