学计算机的那个

不是我觉到、悟到,你给不了我,给了也拿不住;只有我觉到、悟到,才有可能做到,能做到的才是我的.

0%

并发编程的幕后

随着CPU、内存和I/O设备的不断升级,它们之间一直存在着一个矛盾,就是速度不一致问题。CPU的速度高于内存,内存的速度又高于I/O设备。

我们写的代码中大多数内容都会经过内存处理,有些内容会去读写I/O设备,根据木桶理论,整体的性能取决于最慢的操作,就是I/O设备,所以单单提升CPU的性能是不够的。

为了最大化体现出CPU的性能,计算机底层主要做了三部分优化:

  1. CPU增加了缓存,比内存速度更快,平衡内存的速度

  2. 操作系统增加了进程和线程,可以对CPU分时复用

  3. 编译程序会进行指令的重排,使缓存更好的发挥性能

我们平时的工作中其实一直都享受着这些优化后的成果,但同时他们也会导致一些很难找到原因的BUG。

阅读全文 »

Switch

switch 语句会尝试把某个值与若干个模式(pattern)进行匹配。根据第一个匹配成功的模式,switch 语句会执行对应的代码。当有可能的情况较多时,通常用 switch 语句替换 if 语句。

1
2
3
4
5
6
7
8
9
switch <#some value to consider#> {
case <#value 1#>:
<#respond to value 1#>
case <#value 2#>,
<#value 3#>:
<#respond to value 2 or 3#>
default:
<#otherwise, do something else#>
}
阅读全文 »

结合 Core Data 和 SwiftUI

SwiftUI 和 Core Data 几乎是在十年前后被分别引入 —— SwiftUI 是伴随 iOS 13, 而 Core Data 是伴随 iPhoneOS 3 发布;

Core Data 是一个“对象图谱和持久化框架”,这是对于定义对象和对象属性,然后从永久存储中读写它们的高级叫法。表面上看,使用它意味着使用CodableUserDefaults这些东西,但它远不止这些:Core Data 能够排序和过滤我们的数据,对于更大的数据也成立 —— 基本上对于数据量没有限制。更棒的是,Core Data 还实现了各种高级的功能,你会依赖它们:包括数据可视化,数据懒加载,撤销和重做,等等。

阅读全文 »

让GeometryReader来解决吧

父级视图想要什么?

当你给自定义视图编码时,你通常不需要担心它周围的环境和它的尺寸。举个例子,假设你需要创建一个绘制矩形的视图,你只要绘制一个 Rectangle 就好了。它会以父级视图指定的尺寸和位置被绘制。

阅读全文 »

Hot Prospects 理解 Swift 的 Result 类型

让一个函数在执行成功时返回某些数据,执行失败时返回某个错误是很常见的做法。我们通常会利用抛出错误的函数来实现这个要求,一旦函数抛出错误运行 catch 块,这样就独立地处理成功和失败的逻辑。但是假如函数并不是立即返回的呢?

阅读全文 »

并发

refreshable 是否是 SwiftUI 中唯一支持异步代码的属性呢?

task modifier 也提供了开箱即用的异步代码支持。通常来说,我们只有在能为开发者提供附加的实用工具时才会将你们提供的闭包放进异步环境中执行,比如在 task 附着的视图生命周期结束时取消 task,或者结束刷新动画。当然,如果你希望在别的地方也能把代码分发到异步环境中执行,可以使用 async 代码块!

阅读全文 »