OC中的Block和swift中的闭包

  1. 一般来说,Objective-C中的Block和Swift中的闭包用法并无显著区别,两者都是作为匿名函数来使用的,两者都可以作为变量、参数使用
  2. 除了写法上的区别外,两者最显著的区别在于对外部变量值捕获的时机。
    • Block在定义函数的时候已经完成了对引用的外部变量值的拷贝,在函数内部与外部修改这个变量值不会产生相互影响。如果想在函数内部修改引用的外部变量值并影响到外部,则需要使用__block修饰变量
    • 而闭包在则是在函数调用的时候再去捕获引用的外部变量值,在闭包内部对外部变量值的改变也会影响到外部。简言之,两者的区别就在与闭包默认用__block修饰了引用的外部变量。

你可能感兴趣的:(OC中的Block和swift中的闭包)