UISwitch deinit从未调用

时间:2016-10-02 14:53:37

标签: ios swift uiswitch

前几天我发布了一个问题here,我还没有找到答案。我认为这是一个错误,并希望它将来会得到解决,但不能不认为它也可能是我自己做错了。

有了这个问题,我希望能够确认它是一个错误,所以我可以继续处理我的项目,而不用担心太多。如果这个问题是重复的,我会立即删除这个问题。

我已经将UISwitch添加了deinit子类,因此我可以看到它何时被解除分配。

class CustomSwitch: UISwitch { deinit {print("Switch has been deinitialized")} }

然后我在视图控制器中添加了一个属性:

var customSwitch: CustomSwitch? = CustomSwitch()

为了测试它,我添加了一个具有以下功能的按钮:

func removeSwitch() {
    print(customSwitch)
    customSwitch = nil
    print(customSwitch)
}

以下内容在控制台中打印出来:

Optional(<Debugging.CustomSwitch: 0x7f9ec91083c0; baseClass = UISwitch; frame = (0 0; 51 31); layer = <CALayer: 0x6100000384a0>>)
nil

未打印deinit消息,在仪器中显示customSwitch仍在内存中。

我唯一能找到的是this

2 个答案:

答案 0 :(得分:0)

这是(最终)在iOS 10.2中修复

答案 1 :(得分:-1)

根据Apple Docs,我认为我们无法手动取消。它说Deinitializers are called automatically, just before instance deallocation takes place. You are not allowed to call a deinitializer yourself.