Подкласс VS Категория для CALayer - PullRequest
1 голос
/ 24 ноября 2011

Если я сделаю подкласс CALayer и переопределю метод drawInContext:, все будет отлично. Если я создаю категорию для CALayer, где переопределяю тот же метод (в качестве альтернативы подклассу), он вызывается, но ничего не рисует. Конечно, [super drawInContext:ctx] вызывается в обоих случаях. Зачем?
У меня нет проблем с подклассами, мне просто любопытно, почему это происходит. У меня сложилось впечатление, что категории можно использовать для добавления или переопределения методов для любого класса в качестве альтернативы созданию целого подкласса.
Спасибо!

1 Ответ

2 голосов
/ 25 ноября 2011

Вызов реализации super в категории вызывает их в суперклассе объекта, с которым вы имеете категорию, а не в исходной реализации объекта, которую вы пытаетесь сделать.

super,при использовании в контексте вызова метода в методе экземпляра вызывает реализацию этого метода суперклассом.

В категории вы не создали подкласс - код, который у вас естьзаписано выполняется непосредственно классом, против которого вы имеете категорию.Поэтому вызовы super реализаций будут отправлены суперклассу CALayer, который является NSObject.

Поэтому я немного удивлен, что вы не получили предупреждений компилятора при попытке сделать это в категории.

Здесь еще более подробно обсуждается это: Вызывает super вкатегория такая же, как вызов в подклассе?

...