初识Swift中的值和引用,循坏引用、代理的谨慎点
发布时间:2021-11-19 10:16:25 所属栏目:PHP教程 来源:互联网
导读:1.0 在Swift中分有值类型和引用类型 Int 、String 、 结构体和枚举都属于值类型, 将值类型传递给方法是,将在内存中创建其副本,并传递这个副本;这样我们就可以随心所欲修改它,而不用担心这会修改传入的原始值。 传递引用类型时不会复制它,而将其地址提
1.0 在Swift中分有值类型和引用类型 Int 、String 、 结构体和枚举都属于值类型, 将值类型传递给方法是,将在内存中创建其副本,并传递这个副本;这样我们就可以随心所欲修改它,而不用担心这会修改传入的原始值。 传递引用类型时不会复制它,而将其地址提供给可能使用他们的函数或方法。闭包以及从类实例化得到的对象都属于引用类型。将闭包或者对象传递给方法时,不会创建其副本,而是传递引用(内存地址)。由于传递引用类型时不会创建其副本,因此需要特别小心,确保在正确的时间妥善地释放它们,过早的释放内存,将会导致崩溃,过晚又会导致内存泄露。 2.0 引用循环 在这里我们就用一个简单地例子,来简单的说明在开发中,怎么样会造成循环引用。 例:一个人拥有一条狗,而狗拥有一个主人 直接上代码 这里Person类里面拥有一个dog属性, 而deinit 相当OC中的dealloc函数 这里Dog类里面有个主人。。。 在 main.swiftz中 我们这样使用 运行程序,我们会看到,输出台没有任何输出。。。。而当我们在它们其中一个类型中,在声明属性时 添加 weak 时,情况就会不一样。。如,运行程序,就会打印出,人被回收,狗被回收。。。 从这个例子我们看以看出 在使用 var 声明时,默认是强引用,相当OC中的strong 讲到这里 var 默认强引用,就想到代理 一开始,我用Swift写代理是这么写的 个人感觉,没错啊,可是在OC环境下变成了 这时感觉,跟苹果的设计理念不同啊,一般代理属性都应该是 weak啊,然后我就找到了 var delegate : LMTablBarViewDelegate? 这句,在前面添加weak 之后,在看看变化 这样终于是自己想要的结果。。。。所有我们在设置 代理属性时 应该 在前面 添加 weak修饰。 这些只是个人看法,如有错误,希望大家能帮忙修正 (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |