什么用斯威夫特的延迟
问题描述:
雨燕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
}
+0
这是很好的数据。所以'延期'只能在这些特定范围内使用?这很有用。我的理解是它可以在函数的任何地方使用。而我的问题是,在那个函数中,“延迟”和“什么”是有意义的。此外,何时/如何不使用它。 – 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