2016-10-02 6 views
1

Несколько дней назад я опубликовал проблему 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

+0

Я только один переживает это? –

+0

Включен ли переключатель в режим просмотра? если так, то представление сохраняет его, и он не собирается уходить из памяти. если вы это сделаете, вы должны немедленно принять deinit: слабый var customSwitch: CustomSwitch? = CustomSwitch(), потому что у него нет сильной ссылки. –

+0

Нет, это не добавляется к представлению. Даже если бы это было так, это не имело бы значения. Это известная ошибка, так как отчет об ошибке был отмечен как дубликат. –

ответ

0

Это (наконец) фиксируется в прошивкой 10.2

-1

По Apple Docs, я думаю, что мы не можем Deinit вручную. Это говорит Deinitializers are called automatically, just before instance deallocation takes place. You are not allowed to call a deinitializer yourself.

+0

Но я не вызываю deinit вручную. –

Смежные вопросы