2016-01-13 90 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