非逃逸闭包
闭包在函数返回之前执行。
逃逸闭包
逃逸闭包则恰恰相反,其生命周期长于相关函数。当函数推出时,逃逸闭包仍然被其他对象持有,不会在相关函数结束后释放。
出现情况:
1,异步调用,如网络请求,如果需要在调度队列中持有闭包,这个队列会持有闭包的饮用,什么时候调用闭包不可预知。
2,闭包被存储成属性,全局变量或其他类型稍后使用。
逃逸闭包内如果引用self要做特殊处理,防止造成循环引用。
[weak self] [unowned self]
weak 和 unowned 的区别:
如果引用对象的生命周期内,如果他可能为nil用weak。反之用unowned
网友评论