iOS开发-Swift进阶之闭包,逃逸闭包 & 非逃逸闭包!

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

swift进阶总汇

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

逃逸闭包 & 非逃逸闭包

逃逸闭包定义

闭包作为一个实际参数传递给一个函数时,并且是在函数返回之后调用,我们就说这个闭包逃逸了。当声明一个接受闭包作为形式参数的函数时,可以在形式参数前写@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 makeIncrementer(amount: Int, handler: @escaping (Int)->Void){
        var r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值