前几天我发布了一个问题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
答案 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.