Swift退出时执行defer
Swift退出时执行defer

Swift退出时执行defer

defer 是 Swift 的一个关键字,用于延迟执行一段代码直到当前作用域结束时再执行。它的作用就是:“最后再做这件事”,不管是正常退出、return、还是抛出错误,它都会执行。

defer 的代码 一定会在当前作用域(函数、闭包、do块)退出时执行。

基本用法

func example() {
    print("1")
    defer {
        print("This runs at the end!")
    }
    print("2")
}

输出结果:

1  
2  
This runs at the end!

用法示例

用法示例1:在多线程中释放锁

let lock = NSLock()

func updateData() {
    lock.lock()
    defer { lock.unlock() }  // 确保无论如何都会释放锁

    // 执行线程安全的代码
}

即使函数中间提前 return 或抛出异常,unlock() 都会运行。

用法示例2:清理资源

func readFile() throws {
    let file = try FileHandle(forReadingAtPath: "data.txt")
    defer {
        file.closeFile()  // 无论函数是否抛错,都会关闭文件
    }
    // 使用文件
}

特点

多个 defer,先进后出(LIFO)。

func test() {
    defer { print("A") }
    defer { print("B") }
    defer { print("C") }
}
test()

输出顺序是:

C  
B  
A

使用场景

1、NSLock解锁:

lock.lock()
defer { lock.unlock() }

2、文件操作:

func readFile() throws {
    let file = try FileHandle(forReadingAtPath: "data.txt")
    defer {
        file.closeFile()  // 无论函数是否抛错,都会关闭文件
    }
    // 使用文件
}

3、数据库连接关闭:

defer { db.close() }

4、清理临时变量/文件:

defer { cleanup() }

总结

defer用于当前作用于退出时“自动执行”,多个defer是倒序执行。主要用于解锁、清理资源、关闭文件和清理缓存等场景。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注