【发布时间】:2016-10-02 14:53:36
【问题描述】:
几天前我发布了一个问题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
【问题讨论】:
-
只有我一个人遇到这种情况?
-
开关是否被添加到视图中?如果是这样,视图将保留它,它不会耗尽内存。如果你这样做,你应该立即得到一个 deinit: weak var customSwitch: CustomSwitch? = CustomSwitch() 因为它没有强引用。
-
不,它没有被添加到视图中。就算有,也应该没关系。这是一个已知错误,因为我的错误报告已被标记为重复。