博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用@noescape解决Swift闭包“保留环”问题
阅读量:7049 次
发布时间:2019-06-28

本文共 686 字,大约阅读时间需要 2 分钟。

在使用Swift进行编程的时候我们经常使用闭包,闭包虽然好,但是不可避免地会带来“保留环”问题,考虑下面的情况:

在某个动画框架中有一个loop函数:

func loop(duration:NSTimeInterval,reverse:Bool,animations:()->Bool )

在我们自己的类中定义一个动画方法,使用了这个函数:

class MyView:UIView{    func animations(){        loop(duration:0.5,reverse:true){        self.scale(1.25)        }    }    func scale(scale:Double){
...}}

你会发现在闭包中捕获了self,loop函数循环每次都调用闭包,这样会一直保留self。而闭包中的操作其实是一成不变的,没有必要每次都访问。如果我们只调用一次animations闭包,给它拍一张快照就可以解决这个问题了,这就要用到@noescape:

func loop(duration:NSTimeInterval,reverse:Bool,@ noescape animations:()->Bool )

这样就不会有保留环问题,因为这个闭包只被执行一次,即便发生循环时也会绕过闭包。@noescape还是个新角色,但是系统库中已经有些地方在使用了,比如我们熟悉的reduce方法:

func reduce(initial: U, combine: @noescape (U, T) -> U) -> U

转载地址:http://lacol.baihongyu.com/

你可能感兴趣的文章
SQL Server 百万级数据提高查询速度的方法
查看>>
汇编程序:哆瑞米发商拉西
查看>>
centos 7.3 LVS的NAT模式负载均衡实操
查看>>
Zend Server 安装记录
查看>>
算法学习之路|判断题
查看>>
mongoDB文档操作
查看>>
Swiper – 经典的移动触摸滑块插件【免费】
查看>>
Java Formatter 阅读心得
查看>>
利用数据库漏洞扫描评估数据库安全性 4 弱口令扫描
查看>>
【Android游戏开发十一】手把手让你爱上Android sdk自带“9妹”
查看>>
[AlwaysOn Availability Groups]SQL Server错误日志(AG)
查看>>
融合移动设备操作系统的随想(I)
查看>>
崩溃中!Nhibernate的数据分页.
查看>>
如何更改一台已经安装了MOSS2007的服务器名称
查看>>
oralce flashback 使用方法总结
查看>>
操纵BGP路径选择---local preference属性案例(配图+详细验证过程)
查看>>
Linux进程管理工具--God-详解(1)-入门
查看>>
mongodb的学习过程
查看>>
【基础】华为设备默认路由和静态路由配置实战
查看>>
SCCM TP4创建边界和边界组
查看>>