加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

初识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修饰。
 
这些只是个人看法,如有错误,希望大家能帮忙修正

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读