2016-01-13 54 views
4

雨燕2.0引入了一个新的关键字的正确方法:延迟什么用斯威夫特的延迟

什么是使用此关键字的正确途径,我应该怎么注意?

由于swift使用ARC,内存管理通常是自动处理的。所以推迟只需要调用内存管理的情况下,使用传统的低级/非弧调用,是否正确?

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

什么时候应该使用推迟在iOS/OSX开发的“真实世界”(tm)中。而当它使用不好的主意时。

+0

也许这会帮助你? https://www.hackingwithswift.com/new-syntax-swift-2-defer – NBoymanns

+0

可能重复[什么是在Swift中最后的等价物](http://stackoverflow.com/questions/30974104/whats-the-equivalent最后在迅速) – Moritz

+0

谢谢。但是,那更理论。我的意思是从实际的角度来看。什么是/应该是何时使用而不使用延期的最佳做法。 – raf

回答

3

defer关键字的正确使用在快速dotry,catch区块内。在退出dotry,catch块的范围之前,总是会执行defer语句中的过程。通常用于清理,如关闭IO。

do { 

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

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

} catch { 
    // error handling 
} 
+0

这是很好的数据。所以'延期'只能在这些特定范围内使用?这很有用。我的理解是它可以在函数的任何地方使用。而我的问题是,在那个函数中,“延迟”和“什么”是有意义的。此外,何时/如何不使用它。 – raf

1

defer是很好,如果你访问的APIÇ使用和创建的CoreFoundation对象,分配内存,或阅读并fopen写入文件,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