swift – 传递属于self的函数在不在闭包中时会导致保留周期吗?

swift – 传递属于self的函数在不在闭包中时会导致保留周期吗?,第1张

概述如果你需要在一个闭包内部引用self,那么将它作为弱或无主的传递是一种好习惯,以防止保留周期. 如果我直接传递属于self的函数,它会导致保留周期吗?或者它是否需要嵌套在闭包内以削弱自我? 直接通过 UIView.animateWithDuration(0.3, delay: 0.0, usingSpringWithDamping: 0.7, ini 如果你需要在一个闭包内部引用self,那么将它作为弱或无主的传递是一种好习惯,以防止保留周期.

如果我直接传递属于self的函数,它会导致保留周期吗?或者它是否需要嵌套在闭包内以削弱自我?

直接通过

UIVIEw.animateWithDuration(0.3,delay: 0.0,usingSpringWithdamPing: 0.7,initialSpringVeLocity: 0.1,options: .CurveEaSEOut,animations: self.vIEw.layoutIfNeeded,// does this cause retain cycle?         completion: nil)

包裹在一个封闭物中

UIVIEw.animateWithDuration(0.3,animations: { [uNowned self] in            self.vIEw.layoutIfNeeded()        },completion: nil)
解决方法 这不应该创建一个参考周期,但即使这样做也没关系.参考循环仅在动画完成之前存在,此时它将被破坏.创建短暂的参考周期实际上可能是有益的,因为它确保目标在呼叫的整个生命周期中继续存在.周期本身不是问题.不可破坏的周期是问题所在.

这有两个原因不能创造一个循环.首先,没有“循环”.系统将引用某些东西(更多内容在一秒钟内),当然.但在哪里引用“引用那些东西的东西?”更清楚地说,即使动画系统引用自我,自我引用动画系统怎么样?没有循环.

没有循环的另一个原因是你无论如何也不会将自己传递给动画系统.你传递的self.vIEw.layoutIfNeeded.在Swift中,这相当于:

UIVIEw.layoutIfNeeded(self.vIEw)

你不是在这里传递自己.你正在传递一个观点.现在动画系统几乎肯定会在动画完成之前保存对该视图的引用,但这很好.那还不是一个循环.

总结

以上是内存溢出为你收集整理的swift – 传递属于self的函数在不在闭包中时会导致保留周期吗?全部内容,希望文章能够帮你解决swift – 传递属于self的函数在不在闭包中时会导致保留周期吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1017793.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存