相关疑难解决方法(0)

Deinit从未打电话过

我正在创建一个ViewController对象,将其推送到导航控制器.当从堆栈弹出对象时 - 它没有被释放而Deinit没有被调用.可能是什么原因?

这是推送的代码:

self.navigationController?.pushViewController(CustomViewController(), animated: true)
Run Code Online (Sandbox Code Playgroud)

这是弹出的代码:

 self.navigationController?.popViewControllerAnimated(true)
Run Code Online (Sandbox Code Playgroud)

uinavigationcontroller swift deinit

48
推荐指数
8
解决办法
5万
查看次数

我什么时候应该使用deinit?

deinit()在阅读Swift编程语言指南时遇到了一个函数,但是我仍然想知道为什么以及什么时候需要实现它,因为我们不需要管理内存.

问候.

swift

33
推荐指数
2
解决办法
2万
查看次数

用快速语言理解去初始化和继承

假设我有两个类:基类和子类,如下所示:

class Base{
    var name: String?
    init() {
       name = "The base class"
    }

    deinit {
       println("call Deinitialization in base class")
       name = nil
    }
}

class Sub: Base{
    var subName: String?
    init() {
     super.init()
     subName = "The sub class"
    }

    deinit {
       println("call Deinitialization in sub class")
       subName = nil
       // does it really call super.deinit() ?
       // or assign name = nil ?
    }
}
Run Code Online (Sandbox Code Playgroud)

当调用子类的deinitializer时,是否调用super.deinit()name变量赋值为nil?或者我必须在子类的deinitializer中手动分配?

inheritance swift

19
推荐指数
2
解决办法
6087
查看次数

没有被称为deinit的解释

我有一个视图控制器(用于登录),它定义了删除观察者的deinit方法.当用户点击Register按钮时,控制器调用performSegueWithIdentifier来加载注册视图控制器.我定义了deinit方法来删除所有观察者.但是,该方法未被调用.我在某处读到它是因为viewcontroller没有被销毁而且指向它的指针被保存在某处.有谁可以解释这背后的原因?

谢谢

编辑:虽然我同意评论部分提供的链接持有相同的问题,但没有答案或明确的答案.最高的upvoted回复建议在deinit中定义一些内容而不是留空.这并没有回答我正在寻找的探索.出于这个原因,我一直保持这个问题,直到有人能够指出我的理解是不正确的.而且,我确实认为马特简明扼要地解释了它.

ios swift

5
推荐指数
1
解决办法
8426
查看次数

如何让deinit在swift中生效

我有一个汽车课.让我们说一辆车去垃圾场,这辆车应该不再算在总人口中了.我有deinit功能,但我如何系统地从汽车人口中删除汽车?换句话说,我如何让deinit生效?

我有一个类变量,isJunk但不知道如何使用它来使这项工作.

class Car {
    static var population: Int = 0
    var isJunk: Bool = false
    var color: String
    var capacity: Int
    var driver: Bool?
    var carOn: Bool = false
    init (carColor: String, carCapacity: Int) {
        self.capacity = carCapacity
        self.color = carColor
        Car.population += 1

    }
    deinit {
        Car.population -= 1
    }

    func startCar() {
        self.carOn = true
    }
}
Run Code Online (Sandbox Code Playgroud)

initialization swift deinit

2
推荐指数
1
解决办法
3040
查看次数