ios中块(目标C)和闭包(Swift)之间的区别

Suj*_*jay 44 closures objective-c ios objective-c-blocks swift

在教程中,它写的功能上都是相同的,甚至闭包更容易阻塞,它避免了块和内存管理的复杂性,我已经经历了很多教程,但除了这些我没有得到swift的"闭包"和Objective-C"阻止".

任何人都可以深刻解释这种差异.任何帮助,将不胜感激.

GoZ*_*ner 67

摘录自:Apple Inc."将Swift与Cocoa和Objective-C结合使用."iBooks:

"Swift闭包和Objective-C块是兼容的,因此您可以将Swift闭包传递给期望块的Objective-C方法.Swift闭包和函数具有相同的类型,因此您甚至可以传递Swift函数的名称.

闭包具有与块类似的捕获语义,但在一个关键方式上有所不同:变量是可变的而不是复制的.换句话说,Objective-C中__block的行为是Swift中变量的默认行为."


gna*_*729 5

略有差异。有人提到了一个;变量被捕获为变量,而不是值。这可能是有用的,也可能是陷阱。重要的是,您可以在 Swift 闭包中定义捕获列表,因此如果您在捕获列表中包含 self.property,那么将捕获该属性的值,而不是 self。这也简化了捕获弱变量的过程。