美文网首页
swift-defer

swift-defer

作者: g_h_j | 来源:发表于2020-06-11 16:04 被阅读0次

/* defer代码块调用规则

 *1、defer所在的func或scope必须执行到defer才会触发

 *2、所在func或scope结束时执行时调用defer代码块

 *3、多个defer时压栈,先进后出

 *4、嵌套中的defer满足条件1、2、3

 *5、continue 或者 break 都不会妨碍 defer 的执行

 *6、defer代码块不一定总是最后执行,比如所在func或scope中有异步操作时(testFunc6),但总是在func或scope最后一行执行结束之后执行

 */

func testFunc() {

    defer{

        defer{

            print("defer in")

        }

        print("defer1")

    }

    defer{

        print("defer2")

    }

    print("end")

}

func testFunc1() {

    do{

        defer{

            print("finally")

        }

        throwNSError()

        print("impossible")

    }catch{

        print("handle error")

    }

}

func testFunc2() {

    letpath =""

    letfileDescriptor = open(path, O_EVTONLY)

    defer{

      close(fileDescriptor)

    }

    // use fileDescriptor...

    print("end")

}

func testFunc3() {

    letvaluePointer = UnsafeMutablePointer.allocate(capacity:1)

    defer{

      valuePointer.deallocate()

    }

    // use pointer...

    print("end")

}

func testFunc4() {

    letlock = NSLock()

    //同下面的.lock() .unlock()

//        objc_sync_enter(lock)

//        defer {

//          objc_sync_exit(lock)

//        }

    lock.lock()

    defer{ lock.unlock() }

    // do something...

    print("end")

}

functestFunc5(completion: () ->Void,str:String?) {

    defer{

      completion()

    }

    guard let _ = str else { return }

    // handle success

    print("end")

}

override func viewWillLayoutSubviews() {

    defer{

      super.viewWillLayoutSubviews()

    }

    //主要目的是在 super 方法之前做一些准备工作

    // some preparation before super.viewWillLayoutSubviews()...

    print("end")

}

func testFunc6() {

    defer{

        NSLog("defer")

    }

    letqueue = DispatchQueue.init(label:"uuuuuuuuuuu")

    foriin0...2{

        queue.async{

            print("async\(i)")

        }

    }

    print("end")

}

相关文章

  • swift-defer

    来源自喵神的博客:关于 Swift defer 的正确使用 defer简介 从语言设计上来说,defer 的目的就...

  • swift-defer

    /* defer代码块调用规则 *1、defer所在的func或scope必须执行到defer才会触发 *2、所在...

  • Swift-Defer延迟执行

    类似于延迟:

网友评论

      本文标题:swift-defer

      本文链接:https://www.haomeiwen.com/subject/wkibtktx.html