美文网首页swiftios常用功能
[iOS开发]swift闭包中self使用

[iOS开发]swift闭包中self使用

作者: 沈枫_ShenF | 来源:发表于2020-08-30 12:21 被阅读0次

Swift 中的引用方式有以下三种:

  • 强引用:默认,持有其他对象不放,直到自己的生命周期结束。

  • 弱引用(weak):对象在就有值,对象没了就是 nil,所以必须是可选类型。

  • 无主引用unowned):强制解包的弱引用,对象在一切安好,对象没了直接崩溃。

在闭包中通常我们会加上这一句:

[weak self] in guard let self = self else { return }

它会先弱引用 self,然后通过guard确认我们能够暂时强引用 self,在闭包运行结束之后就释放对 self 的引用,这样就能解决大部分闭包导致的引用循环了!不过,如果出现多层闭包嵌套,通常我们的做法如下:

这样写还是可能会循环引用, 因为async 的闭包已经把 self 转为了强引用,所以 animate 的闭包用的 self 也是强引用的。那改成如下写法呢:

还是可能会循环引用,因为编译器为了能够让内层anmation的闭包弱引用 self,会在外层dataTask
的闭包默认强引用了 self,也就是说 dataTask 里的 self 是强引用。所以正确的写法是:

或者一直用 weak self :

参考Stack Overflow:
how-to-correctly-handle-weak-self-in-swift-blocks-with-arguments

为什么在闭包中又将self转回strong类型

相关文章

  • [iOS开发]swift闭包中self使用

    Swift 中的引用方式有以下三种: 强引用:默认,持有其他对象不放,直到自己的生命周期结束。 弱引用(weak)...

  • Swift捕获列表Capture List

    闭包的特点 swift的iOS的app中,遍布着各种闭包,闭包中经常出现捕获列表,我们经常用[weak self]...

  • swift懒加载不需要使用weak unowned

    swift懒加载的闭包内部使用self,不会导致循环引用,原因是因为swift的懒加载闭包是非逃逸闭包@noesc...

  • 解决Swift中callback循环引用 - Delegated

    前言 在Swift中我们使用闭包(Callback)的时候经常要写 [weak self] or [unowned...

  • Day2

    1 单方向的引用不会产生循环引用。循环引用:闭包引用了self,self引用了闭包。Swift推荐使用解决循环引用...

  • Swift笔记

    Swift中weak与unowned的区别 在闭包里面为了解决循环引用问题,使用了 [unowned self]。...

  • Swift4.2新特性 & XCode 10更新

    swift语法更新 SE-0079 允许self在闭包中使用可选绑定 使用上面代码分别在swift3、swift4...

  • JavaScript学习之路-闭包

    一、闭包? 闭包一词想必iOS开发的童鞋指定很熟悉,Objective-C上的闭包叫Block,Swift上就叫闭...

  • Swift中weak与unowned的区别

    在Swift的闭包中为了避免循环引用的问题,通常用[weak self] 或者[unowned self], 前者...

  • 小明学Swift-02-项目篇

    在Swift下,能不用self就不用self一般情况下,只有区分参数,还有在闭包内使用 deinit 相当于OC中...

网友评论

    本文标题:[iOS开发]swift闭包中self使用

    本文链接:https://www.haomeiwen.com/subject/rnxesktx.html