雨燕2.0引入了一個新的關鍵字的正確方法:延遲什麼用斯威夫特的延遲
什麼是使用此關鍵字的正確途徑,我應該怎麼注意?
由於swift使用ARC,內存管理通常是自動處理的。所以推遲只需要調用內存管理的情況下,使用傳統的低級/非弧調用,是否正確?
其他情況包括文件訪問,我想象。在這些情況下,延期將用於關閉「文件指針」。
什麼時候應該使用推遲在iOS/OSX開發的「真實世界」(tm)中。而當它使用不好的主意時。
雨燕2.0引入了一個新的關鍵字的正確方法:延遲什麼用斯威夫特的延遲
什麼是使用此關鍵字的正確途徑,我應該怎麼注意?
由於swift使用ARC,內存管理通常是自動處理的。所以推遲只需要調用內存管理的情況下,使用傳統的低級/非弧調用,是否正確?
其他情況包括文件訪問,我想象。在這些情況下,延期將用於關閉「文件指針」。
什麼時候應該使用推遲在iOS/OSX開發的「真實世界」(tm)中。而當它使用不好的主意時。
defer
關鍵字的正確使用在快速do
,try
,catch
區塊內。在退出do
,try
,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
}
這是很好的數據。所以'延期'只能在這些特定範圍內使用?這很有用。我的理解是它可以在函數的任何地方使用。而我的問題是,在那個函數中,「延遲」和「什麼」是有意義的。此外,何時/如何不使用它。 – raf
defer
是很好,如果你訪問的APIÇ使用和創建的CoreFoundation對象,分配內存,或閱讀並fopen
寫入文件,getline
。然後,您可以確保您在所有情況下都能正確清理,其中包括dealloc
,free
,fclose
。
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
也許這會幫助你? https://www.hackingwithswift.com/new-syntax-swift-2-defer – NBoymanns
可能重複[什麼是在Swift中最後的等價物](http://stackoverflow.com/questions/30974104/whats-the-equivalent最後在迅速) – Moritz
謝謝。但是,那更理論。我的意思是從實際的角度來看。什麼是/應該是何時使用而不使用延期的最佳做法。 – raf