weak 源码分析

iOS 内是通过引用计数来管理内存,引用计数的管理,很容易会出现“循环引用”问题。weak 修饰符,也是开发日常最常用的打破循环引用方式。被 weak 修饰符修饰的弱引用除了不会增加对象的引用计数外;在引用对象被释放后,这个弱引用会自动失效并置为 nil。本篇总结分析下 Objective-C 中 weak 都是怎么实现的。

分析源码基于:DeveloperErenLiu/RuntimeAnalyze/objc4-799.1

Objc Tips

总结记录 Objective-C 使用过程中一些 Tips。

KVC 梳理

KVC 即键值编码。是一种可以不通过存取方法,直接通过属性名称字符串简介访问属性的机制。

KVO 梳理

本篇是对 KVO(Key-Value Observing) 的梳理。内容结构:KVO 基本使用、KVO 实现原理、自己实现 KVO。

Associated Objects 实现原理

在上一篇《Category 梳理》里面提到 Category 可以添加实例方法、添加类方法、添加协议,但是不能添加属性。原因是 objc_category 结构体中没有属性(实例)列表,即使我们声明了属性,编译器也不会帮我们生成对应的 setter/getter。所以这种情况下,如果调用这些属性,会出现崩溃的情况。但这个问题是可以解决的。OC 是一门动态语言,方法真正的实现是通过 runtime 来完成的,虽然系统未给我们生成 setter/getter,但我们可以通过 runtime 来手动添加需要的 setter/getter 方法。即引申除了将要梳理的 Associated Objects

Category 实现原理

本篇是整理之前的笔记,梳理下在 runtime 层面是怎么处理的 Category。