zoukankan      html  css  js  c++  java
  • 15.析构函数

       析构器只适用于类类型,当一个类的实例被释放之前,析构器会被立即调用。析构器用关键字deinit来标示.

     1.析构过程

    1. 析构器是在实例释放发生前被自动调用。
    2. 子类继承了父类的析构器,并且在子类析构器实现的最后,父类的析构器会被自动调用。
    3. 即使子类没有提供自己的析构器,父类的析构器也同样会被调用。
    4. 因为直到实例的析构器被调用后,实例才会被释放,所以析构器可以访问实例的所有属性。
    5. 语法:在类的定义中,每个类最多只能有一个析构器,而且析构器不带任何参数。
     deinit 
     {
        //执行析构过程
     }

    2.示例

    //Bank类管理一种虚拟硬币,确保流通的硬币数量永远不可能超过 10,000。在游戏中有且只能有一个Bank存在
    class Bank
    {
        static var coinsInBank = 10000;
        
        static func vendCoins(numberOfCoinsToVend: Int) -> Int
        {
            let retValue = min(numberOfCoinsToVend, coinsInBank);
            coinsInBank -= retValue;
            return retValue;
        }
        
        static func receiveCoins(coins: Int)
        {
            coinsInBank += coins;
        }
    }
    
    class Player
    {
        var coinsInPurse: Int;
        
        init(coins: Int)
        {
            coinsInPurse = Bank.vendCoins(coins);
        }
        
        func winCoins(coins: Int)
        {
            coinsInPurse += Bank.vendCoins(coins);
        }
        
        deinit
        {
            Bank.receiveCoins(coinsInPurse);
        }
    }
    
    var playerOne: Player? = Player(coins: 100);
    print("Player have (playerOne!.coinsInPurse) coins, Bank have (Bank.coinsInBank)");  //"Player have 100 coins, Bank have 9900
    "
    playerOne?.winCoins(2000);
    print("Player have (playerOne!.coinsInPurse) coins, Bank have (Bank.coinsInBank)");  //"Player have 2100 coins, Bank have 7900
    "
    playerOne = nil;
    print("Player have (playerOne?.coinsInPurse) coins, Bank have (Bank.coinsInBank)");  //"Player have nil coins, Bank have 10000
    "

     

  • 相关阅读:
    外部主机连接mysql服务器延时严重问题
    linux服务器wget无法成功解析域名及程序获取外网数据不稳定问题
    ecstore后台规格超过一定数量保存丢失
    Stata 指标体系权重的计算
    Stata 无序多分类Logistic回归
    asp.net core 管道模型及中间件MiddleWare原理
    Stata—循环语句
    Stata—更名、排序及表达式
    Stata—文件格式转换
    Stata—基本统计量输出、模型估计和结果输出
  • 原文地址:https://www.cnblogs.com/LeeGof/p/5681712.html
Copyright © 2011-2022 走看看