什么是使用Swift推迟的正确方法

时间:2016-01-13 14:50:41

标签: swift deferred

Swift 2.0引入了一个新关键字:延迟

使用此关键字的正确方法是什么?我应该注意什么?

由于swift使用ARC,因此内存管理通常会自动处理。因此,对于使用传统低级别/非弧级调用的情况,只需要调用延迟进行内存管理,对吗?

其他情况包括文件访问,我想。在这些情况下,延迟将用于关闭"文件指针"。

什么时候应该使用我在iOS / OSX开发的真实世界"(tm)中使用延迟。当使用它时是个坏主意。

2 个答案:

答案 0 :(得分:8)

正确使用defer关键字属于快速dotrycatch块。 defer语句中的过程将始终在退出dotrycatch块的范围之前执行。通常,这用于清理,例如关闭IO。

do {

    // will always execute before exiting scope
    defer {
        // some cleanup operation
    }

    // Try a operation that throws
    let myVar = try someThrowableOperation()

} catch {
    // error handling
}

答案 1 :(得分:2)

如果您访问C API并创建CoreFoundation对象,分配内存或使用deferfopen读取和写入文件,

getline会很好用。然后,您可以确保在所有情况下使用deallocfreefclose正确清理。

let buffSize: Int = 1024
var buf = UnsafeMutablePointer<Int8>.alloc(buffSize)
var file = fopen ("file.txt", "w+")
defer {
  buf.dealloc(buffSize)
  fclose(file)
}
// read and write to file and and buffer down here