docs: image url

This commit is contained in:
FantasticLBP
2026-01-02 10:28:57 +08:00
parent 7ac7513900
commit 7843661458
29 changed files with 719 additions and 719 deletions

View File

@@ -159,10 +159,10 @@ Dog.speak() // Animal speak dog is bark
但如果将 `Animal` 方法的 `class` 改为 `static`,就无法 `override`
<img src="./../assets/SwiftCannotOverrideStaticMethod.png" style="zoom:25%">
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SwiftCannotOverrideStaticMethod.png" style="zoom:25%">
<img src="./../assets/SwiftCannotOverrideStaticMethod2.png" style="zoom:25%">
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SwiftCannotOverrideStaticMethod2.png" style="zoom:25%">
- 如果父类的方法是被 class 修饰的,子类继承后重写时,可以将 class 改为 static。
- 虽然子类可以将父类方法的 class 改为 static。但影响的是当前子类的子类无法再重写方法了。
@@ -294,9 +294,9 @@ Animal sleep
`animal.speak()` 处加断点,可以看到
<img src="./../assets/SwiftClassPointerDemo1.png" style="zoom:25%">
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SwiftClassPointerDemo1.png" style="zoom:25%">
<img src="./../assets/SwiftClassPointerDemo3.png" style="zoom:25%">
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SwiftClassPointerDemo3.png" style="zoom:25%">
解释:
@@ -310,7 +310,7 @@ Animal sleep
画了张图,也就是说 `rax` 中存放了 Dog 对象内存中的前8个字节也就是下图的最右侧
<img src="./../assets/SwiftClassPointerDemo2.png" style="zoom:25%">
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SwiftClassPointerDemo2.png" style="zoom:25%">
@@ -415,7 +415,7 @@ print(num) // Optional(12)
1. 不允许同时定义参数标签、参数个数、参数类型相同的可失败初始化器和非可失败初始化器。因为在外部调用的时候,不知道到底是使用哪个初始化方法。编译器会报错 `Invalid redeclaration of 'init(_:)'`
<img src="./../assets/SwiftCanFailedInit.png" style="zoom:25%">
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SwiftCanFailedInit.png" style="zoom:25%">
2. 可以用 `init!` 来定义隐式解包的可失败初始化器
@@ -453,7 +453,7 @@ print(num) // Optional(12)
}
```
<img src="./../assets/SwiftCanFailedInit2.png" style="zoom:25%">
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SwiftCanFailedInit2.png" style="zoom:25%">
且前面的写法比较危险,假设第一个 `init?` 返回 `nil`,第二个 `convenience init()` 去对 nil 强制解包,则会 crash
@@ -732,7 +732,7 @@ var personType: Person.Type = Person.self
<img src="./../assets/SwiftClassMetaDataTypeDemo1.png" style="zoom:25%">
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SwiftClassMetaDataTypeDemo1.png" style="zoom:25%">
在第二行代码下断点可以看到关键的汇编是第8行和第12行
@@ -750,7 +750,7 @@ var personType: Person.Type = Person.self
- `metadata` 结构类似下图右侧
<img src="./../assets/SwiftClassPointerDemo2.png" style="zoom:25%">
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SwiftClassPointerDemo2.png" style="zoom:25%">
@@ -951,7 +951,7 @@ class Person: Runable {
就像上面[多态实现的原理](#target-anchor)这里讲到的一样
<img src="./../assets/SwiftClassPointerDemo2.png" style="zoom:25%">
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SwiftClassPointerDemo2.png" style="zoom:25%">
查表是一种简单、易实现、性能可预知的方式。然而,这种派发方式比起直接派发来说,还是慢了一点(从字节码的角度来看,多了两次读和一次跳转。由此带来了性能损耗)。另一个慢的原因在于编译器可能会由于函数内执行的任务,导致无法优化(如果函数带有副作用的话)