本文主要分析逃逸闭包 、非逃逸闭包、自动闭包

逃逸闭包 & 非逃逸闭包
逃逸闭包定义
当闭包作为一个实际参数传递给一个函数时,并且是在函数返回之后调用,我们就说这个闭包逃逸了。当声明一个接受闭包作为形式参数的函数时,可以在形式参数前写@escaping来明确闭包是允许逃逸的
-
如果
用@escaping修饰闭包后,我们必须显示的在闭包中使用self -
swift3.0之后,系统默认闭包参数就是被
@nonescaping,可以通过SIL来验证
-
1、执行时机:在函数体内执行
-
2、闭包生命周期:函数执行完之后,闭包也就消失了
-
逃逸闭包的两种调用情况
-
1、延迟调用
-
2、作为属性存储,在后面进行调用
1、作为属性
当闭包作为存储属性时,主要有以下几点说明:
-
1、
定义一个闭包属性 -
2、在
方法中对闭包属性进行赋值 -
3、在
合适的时机调用(与业务逻辑相关)
如下所示,当前的complitionHandler作为CJLTeacher的属性,是在方法makeIncrementer调用完成后才会调用,这时,闭包的生命周期要比当前方法的生命周期长
//*********1、闭包作为属性
class CJLTeacher {
//定义一个闭包属性
var complitionHandler: ((Int)->Void)?
//函数参数使用@escaping修饰,表示允许函数返回之后调用
func makeIn

本文详细介绍了Swift中的逃逸闭包与非逃逸闭包,包括它们的定义、区别、使用场景及内存管理。逃逸闭包可能在函数返回后被调用,如在异步操作中;而非逃逸闭包在函数结束前被调用,内存管理更简单。同时,文章提到了自动闭包的概念,并提供了实例分析。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



