笔记摘要(十一)--Swift3.0之解决实例/闭包的循环强引用

  • 解决实例之间的循环强引用

    • 可以通过定义类之间的关系为弱引用或无主引用,以替代强引用,从而解决循环强引用的问题。
    • 对于生命周期中会变为nil的实例,使用弱引用,关键字weak
    • 对于初始化赋值后再也不会被赋值为nil的实例,使用无主引用。
    • 弱引用必须被声明为变量,表明其值能在运行时被修改。弱引用不能被声明为常量。
    • 无主引用是永远有值的,因此,无主引用总是被定义为非可选类型。关键字unowned
  • 解决闭包引起的循环强引用

    • 在定义闭包时同时定义捕获列表作为闭包的一部分,这样可以解决闭包和类实例之间的循环强引用。
    • 在闭包和捕获的实例总是互相引用并且总是同时销毁时,将闭包内的捕获定义为无主引用。
    • 在被捕获的引用可能会变为nil时,将闭包内的捕获定义为弱引用。

你可能感兴趣的:(笔记摘要(十一)--Swift3.0之解决实例/闭包的循环强引用)