Что эквивалентно защищенным методам в Objective-C? Я хочу определить методы, которые могут вызывать / реализовывать только производные классы.
objective-c
LK.
источник
источник
Вы можете смоделировать защищенный и частный доступ к методам, выполнив следующие действия:
Эти средства защиты, как заметил Сачин, не применяются во время выполнения (как, например, в Java).
источник
UIGestureRecognizerSubclass.h
Вот что я сделал, чтобы сделать защищенные методы видимыми для моих подклассов, не требуя от них реализации самих методов. Это означало, что я не получал предупреждений компилятора в моем подклассе о неполной реализации.
SuperClassProtectedMethods.h (файл протокола):
SuperClass.m: (теперь компилятор заставит вас добавить защищенные методы)
Подкласс.m:
источник
performSelector
это сделать.[(id)obj hiddenMethod]
. Точно говоря, защищенный метод не поддерживается в Objective-C.Я только что обнаружил это, и это работает для меня. Чтобы улучшить ответ Адама, в вашем суперклассе создайте реализацию защищенного метода в файле .m, но не объявляйте его в файле .h. В вашем подклассе создайте новую категорию в вашем .m файле с объявлением защищенного метода суперкласса, и вы можете использовать защищенный метод суперкласса в своем подклассе. Это в конечном итоге не помешает вызывающему предположительно защищенному методу, если его принудительно во время выполнения.
источник
protectedMethod
Другой способ использования @protected переменных.
источник
Вы можете определить метод как частный метод родительского класса и использовать его
[super performSelector:@selector(privateMethod)];
в дочернем классе.источник
Вы можете вид сделать это с категорией.
Методы не скрываются, если вы импортируете категорию в другой класс, но вы этого не делаете. Из-за динамической природы Objective-C фактически невозможно полностью скрыть метод независимо от типа вызывающего экземпляра.
Лучшим вариантом, вероятно, будет категория продолжения класса, как ответил @Brian Westphal, но вам придется переопределить метод в этой категории для каждого экземпляра подкласса.
источник
Один из вариантов - использовать расширение класса, чтобы скрыть методы.
В
.h
:В
.m
:источник
@interface
объявление в .m файле. Вы можете просто объявить функцию и использовать ее, и она будет рассматриваться как закрытая.Я обычно называю защищенный метод внутренним префиксом:
источник