mirror of
https://github.com/NohamR/knowledge-kit.git
synced 2026-05-25 04:17:17 +00:00
docs: image url
This commit is contained in:
@@ -1177,7 +1177,7 @@ c 数组指针 `array()->lists + addedCount` 可以代表其中的位置。
|
||||
|
||||
过程如下
|
||||
|
||||

|
||||

|
||||
|
||||
结果就是类方法列表中,最前面的就是所有分类的方法列表,最后是类自身的方法列表。
|
||||
|
||||
@@ -1334,7 +1334,7 @@ Demo: 为 Person 类创建2个 Category,分别存在同名方法 study,具
|
||||
}
|
||||
```
|
||||
|
||||
<img src="./../assets/OCCategoryMethodOrderExplore.png" style="zoom:25%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/OCCategoryMethodOrderExplore.png" style="zoom:25%">
|
||||
|
||||
可以看到 sayHi 方法存在多个,但是由于 Category 同名的方法在方法列表的前面,所以类自身的方法实现”被覆盖了“(根据 isa 查找方法实现的时候,优先查找到 Category 的方法实现,则停止查找了)
|
||||
|
||||
@@ -1347,17 +1347,17 @@ Demo: 为 Person 类创建2个 Category,分别存在同名方法 study,具
|
||||
|
||||
Demo: 为 Person 类创建2个 Category,分别存在同名方法 study,具有不同实现。探索编译顺序决定方法实现
|
||||
|
||||
<img src="./../assets/OCCategoryBuildOrderDemo1.png" style="zoom:25%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/OCCategoryBuildOrderDemo1.png" style="zoom:25%">
|
||||
|
||||
2个对比实验:
|
||||
|
||||
让 `Person+Study` 参与后编译
|
||||
|
||||
<img src="./../assets/OCCategoryBuildOrderDemo2.png" style="zoom:25%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/OCCategoryBuildOrderDemo2.png" style="zoom:25%">
|
||||
|
||||
让 `Person+Learn` 参与后编译
|
||||
|
||||
<img src="./../assets/OCCategoryBuildOrderDemo3.png" style="zoom:25%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/OCCategoryBuildOrderDemo3.png" style="zoom:25%">
|
||||
|
||||
|
||||
|
||||
@@ -2304,7 +2304,7 @@ Person +load
|
||||
|
||||
查看分类在 Runtime 加载类信息时候的调用原理可以知道,分类中的类方法、对象方法都会被加载原始类的前面去(initialize 是类方法)如下图:
|
||||
|
||||

|
||||

|
||||
|
||||
### 为什么给子类发消息,父类和子类的 +initialize 都会被调用?且父类的先调用
|
||||
|
||||
@@ -3059,7 +3059,7 @@ void _object_set_associative_reference(id object, void *key, id value, uintptr_t
|
||||
|
||||
梳理后,如下图所示:
|
||||
|
||||
<img src="./../assets/AssociatedSaveValueInRuntimeStructure.png" style="zoom:45%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/AssociatedSaveValueInRuntimeStructure.png" style="zoom:45%">
|
||||
|
||||
AssociationsManager 管理的 AssociationsHashMap 结构如下:
|
||||
|
||||
@@ -3178,7 +3178,7 @@ NS_ASSUME_NONNULL_END
|
||||
|
||||
### 声明私有方法
|
||||
|
||||
<img src="./../assets/CategoryUsageDeclPrivateMethod.png" style="zoom:30%" />
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/CategoryUsageDeclPrivateMethod.png" style="zoom:30%" />
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user