Несколько дней назад я опубликовал проблему here, и я все еще не нашел ответа. Я думаю, что это ошибка, и надеюсь, что это будет исправлено в будущем, но не может не думать, что это может быть и то, что я сам делаю неправильно.UISwitch deinit никогда не назывался
С этим вопросом я надеюсь, что смогу подтвердить, что это ошибка, поэтому я могу продолжать работать над своим проектом, не беспокоясь об этом слишком много. Если этот вопрос повторяется, я сразу удалю вопрос.
Я подклассифицировал 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: слабый var customSwitch: CustomSwitch? = CustomSwitch(), потому что у него нет сильной ссылки. –
Нет, это не добавляется к представлению. Даже если бы это было так, это не имело бы значения. Это известная ошибка, так как отчет об ошибке был отмечен как дубликат. –