Xcode 13 中优化 Swift 对象的生命周期
Aug 28, 2022
默认情况下,Swift 对象的生命周期如下: 在 WWDC 21 中 ARC in Swift: Basics and beyond,新发布的 Xcode 13 增加了一个选项,用来优化 Swift 对象的生命周期: 当这个选项开启后,对象原本要超出作用域才会析构,现在被优化为在作用域内不再被使用就会被析构。 这个特性是在编译期间进行的,由编译器在适当的地方插入 release 来提前结束对象的生命周期。 …
ARC 与 AutoreleasePool
Aug 27, 2022
Objective-C 中的 ARC 与 AutoreleasePool Objective-C 中的对象在引用计数为 0 的时候就会被释放,为了解决手动管理引用计数(MRC)容易发生内存泄漏或者过度释放的问题,引入了自动引用计数(ARC)。 …
Swift 中的闭包(Closure)
Aug 17, 2022
普通闭包写法: let closure = { (data, error) in if let data = data { // handle data } } 使用闭包延迟求值: lazy var titleLabel = { () -> UILabel in let lable = UILabel() lable.font = .systemFont(ofSize: 13) lable.textColor = .systemOrange lable.textAlignment = .justified return lable }() 自动闭包 @autoclosure 修饰符,用于函数参数类型修饰,表示接受的类型是一个闭包或者是与闭包的返回类型相同的值。 …
Swift 中的 Any 和 AnyObject
Aug 17, 2022
AnyObject :表示任意的 class 类型的实例,包括来自 ObjC 类和纯 Swift 的类,类似于 id 在 ObjC 里的概念。 Any :表示任意的类型实例,Swift 中的所有数据类型都可以用它表示。 如何选择 如果需要表示任意的引用类型的实例或者需要与 ObjC 接口交互,使用 AnyObject。 …
Swift 中的字符串插值
Jul 02, 2022
字符串插值是在 Swift 3 中面向开发者推出的,因为太拉垮被标记为废弃。到了 Swift 5 经过重写之后又回归了。 可用性:iOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+, Xcode 10.2+ 在没有字符串插值之前,只能使用字符串格式化这一种方式: …
SwiftUI 学习资源
Jun 29, 2022
SwiftUI-Lab 网站上的文章是免费的,官方有一个收费的 App,整合了 SwiftUI 里的很多 API 使用例子 SwiftUI Companion Interactful 是 SwiftUI Companion 的免费替代版本。 Interactful
微软在 Apple 平台上的努力
Jun 23, 2022
FluentUI Fluent 是微软 Windows 界面的设计语言,就是界面设计规范。 微软使用 Swift 实现了一套 Fluent 风格的界面库。 支持 iOS 14+ 和 macOS 10.14+ https://github.com/microsoft/fluentui-apple FluentDarkModeKit Swift 实现的自动适配深色和浅色风格的库,支持 iOS 11+ …
SwiftUI 相关的开源实现
Jun 15, 2022
Swift 是苹果公司的开源编程语言,但是苹果公司使用 Swift 开发的一些好用的框架却是闭源的,比如:SwiftUI、Combine。 以下是开源社区的实现版本: SwiftUI 的开源实现 由于 SwiftUI 涵盖的范围确实太大,以下开源项目现在已经不继续维护了,有点可惜。 …
Swift 中的值类型和引用类型
May 30, 2022
Swift 中的 struct, enum, tuple 是值类型,class 是引用类型。 值类型在传递的时候是直接拷贝一份数据副本,而引用类型不拷贝数据,只是增加引用计数。 为了避免内存浪费,Swift 对值类型增加了一个写时复制(Copy-On-Write)的特性,只有在赋值后做了修改才会发生拷贝数据副本的行为,否则就和引用类型一样共享一份数据。 …
Swift 使用泛型实现命名空间形式的扩展
May 03, 2022
什么是命名空间形式的扩展 什么是扩展? extension UIView { var v: ... } v 就是扩展出来的一个 UIView 属性。 什么是命名空间? 相较于 ObjC 没有命名空间的特性,Swift 使用模块名作为命名空间进行隔离,防止不同模块中有同名扩展而造成冲突。 …