【问题标题】:How to call deinit in Swift [duplicate]如何在 Swift 中调用 deinit [重复]
【发布时间】:2014-09-29 02:51:20
【问题描述】:

我写了如下代码块:

class Person{
        let name:String;
        init(name:String){
         self.name = name;
          println("\(name) is being initialized.");
     }

     deinit{
         println("\(name) is being deInitialized.");

    }
 }

var person:Person?;
person = Person(name:"leo");
person = nil;

初始化时print就可以了。当设置person为nil时,不会调用deinit方法。

【问题讨论】:

  • 最后 3 行的真正背景是什么?他们不能在现实生活中就那样坐以待毙……
  • 嗯,这就是问题所在。
  • 如果您在 Playground 中尝试此操作,那么我认为这就是它不起作用的原因。我刚刚实现了 Swift 书中的“银行”示例,并且在操场上没有调用 deinit 方法,但是如果我将代码放入应用程序并运行它,它就是。
  • JFI:现在在操场上运行良好。

标签: ios swift


【解决方案1】:

问题是游乐场不是现实生活。这只是不使用它们的另一个原因(我认为它们是 Apple 的一个严重错误)。使用真正的 iOS 应用项目,deinit 将按预期调用。

来自真实项目的示例:

class ViewController: UIViewController {
    class Person{
        let name:String;
        init(name:String){
            self.name = name;
            println("\(name) is being initialized.");
        }
        deinit{
            println("\(name) is being deInitialized.");

        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        var person:Person?;
        person = Person(name:"leo");
        person = nil;
    }
}

这符合您的预期。

【讨论】:

  • 您是否仍然“认为他们是 Apple 的一个严重错误”
  • @PaulWoodIII 不,现在我认为他们是魔鬼的作品
  • 分号(;),真的需要吗?
  • @turtle 它们是 OP 的分号。我只是展示给定的 OP 代码确实可以工作,如果你把它放在正确的地方。
猜你喜欢
  • 1970-01-01
  • 2015-10-21
  • 2019-09-26
  • 1970-01-01
  • 2018-12-18
  • 2019-12-14
  • 2014-10-08
  • 2015-08-25
  • 2017-03-11
相关资源
最近更新 更多