weak-strong dance 的注意事项
Aug 13, 2022
在使用逃逸 Block 的时候,为了防止 self 被循环引用,一般使用以下方式: - (void)foo { __weak typeof(self) wself = self; [self auth:^(NSString *token) { typeof(self) self = wself; if (!self) { return; } }]; } 在 Block 外部定义一个 __weak 类型的 self 引用,在 Block 内部使用同名的局部 self 变量,以上的技巧就叫做 weak-strong dance 。 …
ObjC 中的黑魔法 Swizzling
Aug 07, 2022
ObjC 是动态语言,方法调用都是在运行期间通过 objc_msgSend 向对象发送消息来实现。 而且 ObjC 支持动态增加/交互方法的实现,这个技术称之为 Swizzle。 Swizzle 本质上是改变了方法映射表中的 SEL 与 Method 的对应关系。 …
C/C++ 中的 static 和 inline 的作用
Aug 03, 2022
static 把符号限制为 LOCAL,避免链接时同名造成冲突。 inline 把符号标识为 WEAK,如果出现多个同名则只有一个拷贝。 static inline 组合,作用和 static 一样,区别在于编译器视情况决定是否开启内联。 …
如何使用代码结束 iOS 应用
Jul 26, 2022
在 iOS 中,强制退出 App 有以下几种方法: exit(0); 退出整个 App [NSThread exit]; 退出当前线程,在主线程执行可以退出 App abort() 异常中止 App,可以通过捕捉信号 SIGABRT 来进行异常处理 assert() 断言也会让 App 异常中止 因为不管使用何种方式杀掉 App,都会产生正在使用中的资源不能正常释放的问题,比如数据库写入一半 App 中止了。 …
Combine 与响应式编程
Jul 16, 2022
什么是响应式编程? 简单的理解就是:仅当事件发生以后才响应处理。 c <= a + b + c... 以上表达式中,c 是响应处理的逻辑,a, b, c 这些都是事件,当它们发生以后就会触发执行 c。 …
C++ 中的右值引用
Jul 08, 2022
C++ 里的表达式有左值和右值的概念。 一个表达式(expression)要么是广泛左值类型(glvalue),要么是右值类型(rvalue)。 广泛左值(glvalue),还区分为左值(lvalue)和将亡值(xvalue)。 …
在 macOS 上使用 Finder 安装 IPCC (运营商配置文件)
Jul 04, 2022
IPCC 是运营商配置文件,负责控制手机卡的相关配置信息,比如是否有 5G 开关、VoLTE 开关选项。 从系统镜像中提取 IPCC 文件 下载最新版本的系统镜像,比如 12Pro iOS 15.5 的文件名是 iPhone13,2,iPhone13,3_15.5_19F77_Restore.ipsw。 …
Swift 中的字符串插值
Jul 02, 2022
字符串插值是在 Swift 3 中面向开发者推出的,因为太拉垮被标记为废弃。到了 Swift 5 经过重写之后又回归了。 可用性:iOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+, Xcode 10.2+ 在没有字符串插值之前,只能使用字符串格式化这一种方式: …
C 和 C++ 中的结构体(struct)有和不同?
Jun 30, 2022
struct 是一种简单的数据结构,是把不同类型的数据聚合在一起的一种方式。 在 C 语言里,struct 数据结构具有内存连续性的特点,就是说一个结构体的所有字段在内存里存储位置是连续的。 …
SwiftUI 学习资源
Jun 29, 2022
SwiftUI-Lab 网站上的文章是免费的,官方有一个收费的 App,整合了 SwiftUI 里的很多 API 使用例子 SwiftUI Companion Interactful 是 SwiftUI Companion 的免费替代版本。 Interactful