首先我们来对比一下Swift下函数和闭包的区别

Swift的闭包和OC里面的block是非常相似的,作用是用于保存一段代码, 在需要的时候执行
OC: block类似于匿名函数, 用于封装代码块, 在特定的时候执行
类型: 返回值类型(^block名称)(形参列表)
值:
^(形参列表){
需要执行的代码
}
Swift: 闭包是用于定义函数(Swift中函数就是闭包, 闭包就是一个特殊的函数)
类型: (形参列表)->返回值类型
值:
{
(形参列表)->返回值类型
in
需要执行的代码
} // in 的含义是用于区分形参返回值和执行代码
当OC的block遇到循环引用的时候,我们会用__weak typeof(self) weakSelf = self 或者 __unsafe_unretained 来解决
区别:
// __weak : 如果对象释放, 会自动设置为nil
// __unsafe_unretained: 如果对象释放, 不会自动设置为nil
Swift闭包中会使用强引用self,跟OC的block一样会出现循环引用的问题
几个解决的方法如下:

网友评论