Есть ли какая-то серьезная причина, почему представление не может полностью управлять собой? - PullRequest
1 голос
/ 24 мая 2010

Пример: у меня есть значок предупреждающего треугольника, который является подклассом UIImageView. Это предупреждение смешивается с анимацией, пульсирует в течение 3 секунд, а затем исчезает.

  • у него всегда есть родительское представление!

  • всегда используется только так: alloc, init, add as subview, запуск анимации, когда закончите: удалить из superview.

Итак, я хочу это:

[WarningIcon warningAtPosition:CGPointMake(50.0f, 100.0f) parentView:self];

BANG!

Вот и все. Позвони и забудь.

Представление добавляет себя в качестве подпредставителя к родителю, а затем выполняет анимацию. И когда это сделано, он отсекает себя от ветви с [self removeFromSupeview];. И чтобы убедиться, что процедура действительно может завершиться после этого, создайте изящную пару -retain и -autorelease, чтобы все это могло завершиться и вернуться до того, как оно действительно будет уничтожено.

Теперь какой-то ботаник год назад сказал мне: «Никогда не отрывайся от своей собственной ветви». Другими словами: представление никогда не должно удалять себя из суперпредставления, если на него больше нет ссылок.

Я хочу получить это, правда. ЗАЧЕМ? Подумайте об этом: трудным путем я бы сделал то же самое. Создайте экземпляр и повесьте меня в качестве делегата, запустите анимацию, и когда значок предупреждения завершит анимацию, он перезвонит мне: «Эй, чувак, я готов, избавься от меня!» - поэтому мой метод делегата вызывается с указателем на этот экземпляр, и я делаю то же самое: [thatWarningIcon removeFromSuperview]; - BANG.

Теперь мне бы очень хотелось узнать, почему это отстой. Жизнь была бы так проста.

1 Ответ

1 голос
/ 24 мая 2010

У меня нет возражений против вашего решения, особенно с [[self retain] autorelease]. Я сам время от времени использую один и тот же подход.

Вы должны пойти и спросить ботаника без веток о его рассуждениях (и опубликовать эту информацию здесь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...