DahuangPhoneiOSSwift → Swift 的内存管理以及弱引用和无主引用


  共有10406人关注过本帖树形打印复制链接

主题:Swift 的内存管理以及弱引用和无主引用

帅哥哟,离线,有人找我吗?
dahuangphone
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:407 积分:4533 威望:0 精华:0 注册:2012/9/29 7:54:10
Swift 的内存管理以及弱引用和无主引用  发帖心情 Post By:2014/10/11 9:58:04 [只看该作者]

 Swift 针对 引用类型使用ARC管理机制,非引用理性由处理器决定。

循环引用问题主要发生在两种情况上,

1. 两个类互相引用,导致谁也释放不了谁
2. 在类中使用闭包,闭包也是一种引用类型,闭包中又引用了拥有它的这个类。

解决循环循环引用的方法是弱引用和无主引用。

弱引用和无主引用异同:

相同点:都不用有引用者

不同点:weak引用可以接受对方是nil,无主引用要求对方一定是一个存在对象。

使用方法:

1. 类中:
weak class:name?       
unowned class:name

2. 闭包中

lazy var func(Int,Int)->Int={             
      [weak self](a:Int,b:Int)->Int in
      return self!.no
}

lazy var func(Int,Int)->Int={
      [unowned self](a:Int,b:Int)->Int in
      return self.no
}


类中定义闭包的几个解释:

1. 为什么用lazy?
Swift要求面向对象的实例在没有初始化完成员属性成是不能读取成员属性以及方法的,因此含有读取self的闭包不能和初始化实例同时进行。

2. 为什么weak的闭包中的self需要用!,unowned不需要
weak的定义的变量名称是带?的,既可以接受nil的返回值,因此在读取weak前缀的变量的值得时候,必须用!。unowned则不需要。







[此贴子已经被作者于2014/10/11 9:58:43编辑过]

 回到顶部