Developing Applications for iOS using SwiftUI
Total Lecture: 15
current: [13-15]
Stanford CS193p - [10-12]
Developing Applications for iOS using SwiftUI
Total Lecture: 15
current: [10-12]
Stanford CS193p - [7-9]
Developing Applications for iOS using SwiftUI
Total Lecture: 15
current: [7-9]
Stanford CS193p - [4-6]
Developing Applications for iOS using SwiftUI
Total Lecture: 15
current: [4-6]
Stanford CS193p - [1-3]
Developing Applications for iOS using SwiftUI
Total Lecture: 15
current: [1-3]
多线程面试题
面试题 1
假设我有一个类
1 | @interface OrderPint : NSObject |
三个不同的线程ABC将会共用一个 OrderPint
实例
线程A 会调用 first
方法
线程B 会调用 second
方法
线程C 会调用 third
方法
请完善OrderPint
,让 first
second
third
按照指定的顺序被打印
例如
输入 @”123” 打印
1 | first |
输入 @”321” 打印
1 | third |
并发编程带来的问题
并发编程的幕后
随着CPU、内存和I/O设备的不断升级,它们之间一直存在着一个矛盾,就是速度不一致问题。CPU的速度高于内存,内存的速度又高于I/O设备。
我们写的代码中大多数内容都会经过内存处理,有些内容会去读写I/O设备,根据木桶理论,整体的性能取决于最慢的操作,就是I/O设备,所以单单提升CPU的性能是不够的。
为了最大化体现出CPU的性能,计算机底层主要做了三部分优化:
-
CPU增加了缓存,比内存速度更快,平衡内存的速度
-
操作系统增加了进程和线程,可以对CPU分时复用
-
编译程序会进行指令的重排,使缓存更好的发挥性能
我们平时的工作中其实一直都享受着这些优化后的成果,但同时他们也会导致一些很难找到原因的BUG。
Swift语法遗珠
Switch
switch 语句会尝试把某个值与若干个模式(pattern)进行匹配。根据第一个匹配成功的模式,switch 语句会执行对应的代码。当有可能的情况较多时,通常用 switch 语句替换 if 语句。
1 | switch <#some value to consider#> { |
Swift花园笔记 - CoreData
结合 Core Data 和 SwiftUI
SwiftUI 和 Core Data 几乎是在十年前后被分别引入 —— SwiftUI 是伴随 iOS 13, 而 Core Data 是伴随 iPhoneOS 3 发布;
Core Data 是一个“对象图谱和持久化框架”,这是对于定义对象和对象属性,然后从永久存储中读写它们的高级叫法。表面上看,使用它意味着使用Codable
和UserDefaults
这些东西,但它远不止这些:Core Data 能够排序和过滤我们的数据,对于更大的数据也成立 —— 基本上对于数据量没有限制。更棒的是,Core Data 还实现了各种高级的功能,你会依赖它们:包括数据可视化,数据懒加载,撤销和重做,等等。