学计算机的那个

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

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 代码块!

阅读全文 »

八个常见的SwiftUI误用及对应的正确打开方式

直接把八条误用先简明扼要地罗列如下,然后我们逐条深入展开:

  1. 添加不必要的 View 和 Modifier
  2. 在需要用 @StateObject 的地方用了 @ObservedObject
  3. Modifier 顺序错误
  4. 给属性包装器添加属性观察者
  5. 在需要用描边框的地方使用了描形状
  6. Alert 和 Sheet 与可选状态的使用
  7. 尝试改变 SwiftUI 视图后面的东西
  8. 用错误的范围动态创建视图
阅读全文 »

表单

用户输入一些信息,SwiftUI 为这种场景专门提供了一个视图类型,称为Form,Form是一个可滚动列表,除了可以包含文本和图像这样的静态控件,也可以包含文本框,开关,按钮这些用户可交互的控件。

可以在form里放进任意多你想要的元素,不过如果元素超过10个,SwiftUI会要求你对元素进行分组。

阅读全文 »

静态工厂

静态工厂模式的三个好处

命名构造器

静态工厂模式的头等好处是:每一个静态工厂方法都有一个自己的名字。Apple 在 UIColor 类实现中使用这个模式创建了许多命名颜色,比如 .red.yellow,等。 注意,Swift 中的这种实现并非是方法,而是静态属性,返回一个实际的实例。

1
2
3
4
5
6
7
public extension TimeInterval {
public static var second: TimeInterval { return 1 }
public static var minute: TimeInterval { return 60 }
public static var hour: TimeInterval { return 3_600 }
public static var day: TimeInterval { return 86_400 }
public static var week: TimeInterval { return 604_800 }
}

记住一天或者一周有多少秒很困难吧?所以 TimeInterval.week604_80 好多了。

阅读全文 »