当使用闭包时,类本身持有self,然后又在闭包中访问了self或者self的属性,就会导致恶心额循环引用。swift提供的解决方法是在闭包中定义捕获列表,捕获列表是闭包想怎么引用捕获来的变量。例如下面定义了一个捕获列表,引用self为unowned引用,这样在宾傲中用self就不会导致循环引用

    let name = "cyy"
lazy var someClosure: (Int, String) -> String = {
[unowned self](index: Int, stringToProcess: String) -> String in
print(stringToProcess + self.name)
return self.name
}
//打印的值为:
//lllcyy
//deinit >>><kuaixiaoyigou.LoginViewController: 0x7fde8a40acb0>

去掉捕获列表

let name = "cyy"
lazy var someClosure: (Int, String) -> String = {
(index: Int, stringToProcess: String) -> String in
print(stringToProcess + self.name)
return self.name
}
//打印值:
//lllcyy 没有调用deinit

  

swift 闭包循环引用的更多相关文章

  1. Swift-闭包使用及解决循环引用问题

    Swift中闭包使用参考OC中block使用,基本一致 // 闭包类型 首先写(参数列表)->(返回值类型) func loadData(callBack : (jsonData:String) ...

  2. iOS循环引用

    iOS循环引用 当前类的闭包/Block属性,用到了当前类,就会造成循环引用 此闭包/Block应该是当前类的属性,我们经常对Block进行copy,copy到堆中,以便后用. 单方向引用是不会产生循 ...

  3. swift中闭包的循环引用

    首先我们先创造一个循环引用 var nameB:(()->())? override func viewDidLoad() { super.viewDidLoad() let bu = UIBu ...

  4. Swift 闭包使用(循环引用...)

    class networkTool: NSObject { //定义一个可选类型的闭包,用小括号()?括起闭包 var finishedCallBack2:((_ jsonData:String)-& ...

  5. swift闭包中解决循环引用的问题

    swift中可以通过三种方法解决循环引用的问题 利用类似oc方法解决循环引用weak var weakSelf = self weak var weakSelf = self loadData = { ...

  6. Swift 学习笔记 (解决Swift闭包中循环引用的三种方法)

    话不多说 直接上代码 class SmartAirConditioner { var temperature:Int = //类引用了函数 var temperatureChange:((Int)-& ...

  7. Swift 学习笔记 (三) 之循环引用浅析

    原创:转载请注明出处 110.自动引用计数实践 下面的例子展示了自动引用计数的工作机制.例子以一个简单的Person类开始,并定义了一个叫name的常量属性: class Person {     l ...

  8. swift详解之九---------------自动引用计数、循环引用

    自动引用计数.循环引用(这个必须理解,必须看) 注:本文详细介绍自动引用计数,以及各种循环引用问题.一网打尽! 1. 自动引用计数原理 Swift 使用ARC机制来跟踪和管理你的内存,一般情况下,Sw ...

  9. Swift入门(十)——循环引用、弱引用和无主引用

    近期看到swift里面不仅有循环引用和弱引用(weak),还加入了无主引用(unowned),于是写了一些demo,这里总结一下. 和OC一样.Swfit默认也是基于ARC进行内存管理的,因此尽管简单 ...

随机推荐

  1. zookeeper 安装 测试及集群

    centos 安装 zookeeper-3.5.2-alpha.tar.gz 网上搜索了 一下 安装教程 其实很简单 主要总结一下 中间遇到的坑 1.zookeeper 3.4.6 启动失败. 很有可 ...

  2. 严重:Error listenerStart

    转自: http://1985wanggang.blog.163.com/blog/static/7763833200942611050436/ 近日浏览论坛,发现好多人提问,都说在运行web程序时, ...

  3. C# GDI+发生一般性错误(A generic error occurred in GDI+))

    解决思路: 1. 因为 .net GDI+ 是对底层 的封装. 所以可以尝试用 Marshal.GetLastWin32Error();函数获得底层错误代码. try{ image.Save(file ...

  4. 将项目上传到git上,并在测试服务器上运行

    上周我完成了我人生的第一个项目,并将它上传到gitHub上完成了团队合作.下面我将用倒叙的方法记录下,我的这段经历. 星期五,项目完成准备上传gitHub启动测试服务器. 1.git clone 项目 ...

  5. 【安全测试】sqlmap安装方法

    参考资料:http://jingyan.baidu.com/article/60ccbceb64cc2064cbb19748.html SQLMap是利用Python语言写的,所以需要将Python这 ...

  6. 微信webview

    会露出灰色的地步 https://segmentfault.com/q/1010000004295291 有说用iscroll5来解决,但是明显有bug啊 https://segmentfault.c ...

  7. 数字图像处理作业使用OpenCV - 块提取

    今天要记录的是树图第二次作业的第二题,Image Patch Extraction.这个概念真的不难懂,但是如果要我实际写的话,还真的不知道要怎么去遍历图像矩阵来提取块.在此要多谢邓大神的热心帮助,告 ...

  8. Sublime Text 2 代码片断

    原文:Snippets 不管是在编码,还是写畅销书,你都可能会需要一遍又一遍的用到一些文本的小片断.使用片断来结束这种单调无聊的码字吧,片断是一种智能的模板,它能在合适的上下文中插入你需要的文本内容. ...

  9. Seajs教程 配置文档

    seajs.config Obj alias Obj 别名配置,配置之后可在模块中使用require调用require('jQuery'); seajs.config({ alias:{ 'jquer ...

  10. git使用和理解之一(不含分支)

    0.前言 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 工作区和暂存区: 我们写代码的地方就是工作区,代码写完后, ...