Swift 关键字
defer
字面意思是推迟, 那什么时候执行呢? 在函数即将结束(return 之前). 具体的使用场景有
- try catch
func example () {
defer {
print("finally")
}
do {
throw NSError()
print("error")
} catch {
print("handle error")
}
}
- 清理工作, 回收资源,加锁/解锁 等
func example () {
let fileDescriptor = open(url.path, 0_EVTONLY)
defer {
close(fileDescriptor)
}
// use fileDescriptor
}
func example() {
let pointer = UnsafeMutablePointer<T>.allocate(capacity: 1)
defer {
pointer.deallocate(capacity: 1)
}
// use pointer
}
func example() {
lock.lock(); defer { lock.unlock() }
// 加锁内容
}
-
completion block
多分支函数的某个分支需要return,恰巧忘了调** completion block ** 此时可以使用defer
func example(completion: () -> void) {
defer {
comletion()
}
guard error == nil else { return }
// handle success
}
4.调super 方法
调super 方法之前需要做一些准备工作,比如UICollectionViewLayout
的 prpare(forCollectionViewUpdates:)
, 那么我们就可以把调用super的部分放到defer里:
func override exmpale() {
defer {
super.example()
}
// some preparation before super.example()
}
网友评论