• 如何在Swift中使用weak修饰Delegate


    1.使用关键词“weak”是为了避免强引用导致的闭环。当两个对象相互强引用对方时就会引起引用闭环,他们的引用计数永远都不会为零;

    2.仅当delegate是一个类时,使用weak关键词。Swift中的struct和enums是值对象类型(当一个新的实例生成时只是值复制),不是引用类型,所以它们不会引起强引用闭环;

    3.weak引用是可选的(optional),所以必须使用var修饰词,这样在释放时可以置为nil;

    4.父类对子类有强引用,从而不使用weak。但是当子类需要引用父类对象的时候,需要使用weak;

    5.当不想拥有一个类的引用时,使用weak,而不仅仅是子类引用父类对象。当两个非继承的类对象需要相互引用对方时,选择一个使用weak;

    6.建议delegate使用weak修饰,因为大多数情况,对象不需要拥有delegate。但是也有一些情况delegate是需要使用strong修饰,比如你在异步读取数据库时,可以在读取过程中保持delegate,在读取成功或者失败后,再设置delegate为nil;

    7.协议protocol既可以用在类中也可以用在非类类型中(比如struct,enums),当在类中使用,需要标记协议类型是class

    protocol MyClassDelegate: class {
        // ...
    }
    
    class SomeClass {
        weak var delegate: MyClassDelegate?
    }
    
  • 相关阅读:
    五种开源协议(GPL,LGPL,BSD,MIT,Apache)
    我想要做的编码机器人
    2017年前端框架、类库、工具大比拼
    Python实现好友全头像的拼接
    Python 中的闭包与装饰器
    Vuex2.0边学边记+两个小例子
    Vue.js写一个SPA登录页面的过程
    react与vue
    20行js代码制作网页刮刮乐
    css3动画详解
  • 原文地址:https://www.cnblogs.com/horo/p/7109433.html
Copyright © 2020-2023  润新知