Безопасно ли переопределять недокументированный / закрытый метод SKNode removeChild?

В SKNode есть недокументированный метод removeChild, который вызывается для родительского объекта при удалении его дочернего объекта методом removeFromParent. Безопасно ли переопределять removeChild?

1 ответ

Решение

Наверное, да, но нет.

Проблема в том, что вы не знаете, будет ли этот метод вызываться во всех случаях. Например, я заметил, что некоторые классы SK*Node направляют некоторые сообщения непосредственно к базовым объектам C++, а не передают сообщение в супер реализацию в SKNode.

Кроме того, я держу пари, что переопределение закрытого метода представляет собой случай использования частного API, из-за которого ваше приложение может быть запрещено публиковать в App Store.

Технически, хотя просто попробуйте и посмотрите, работает ли он. Это вероятно будет. Но по всем другим причинам вам определенно не следует этого делать.

Вместо переопределения removeFromParent и доступ self.parent в вашем переопределении на случай, если вам нужно что-то сделать с родителем. Обратите внимание, что вам придется делать это в каждом подклассе SK*Node. Это потому, что вы не можете переопределить метод в категории, и вы не можете создать подкласс SKNode и ожидать, что методы подкласса будут вызываться из других прямых подклассов SKNode, таких как SKSpriteNode (потому что они параллельны вашему подклассу, а не подклассу Ваш подкласс SKNode).

Другие вопросы по тегам