zoukankan      html  css  js  c++  java
  • 如何在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?
    }
    
  • 相关阅读:
    使用ANT入门例子
    React 项目中使用create-react-app创建项目引入antd样式不起作用的问题
    js中对象数组遍历,及区别
    vue中axios封装
    uni-app中开发需要注意事项
    git 提交代码和 合并分支 ,回滚代码
    vue..js3.0
    vue中强制组件重新渲染
    vuex中获取当前路由
    H5 video在移动端播放层级问题
  • 原文地址:https://www.cnblogs.com/horo/p/7109433.html
Copyright © 2011-2022 走看看