Как избежать методов суперкласса, переопределяемых sub классом в цели - c

Как в Java:

Заключительный класс не может быть разделен на подклассы. Это сделано по причинам безопасности и эффективности. Соответственно, многие классы библиотеки стандарта Java являются окончательными, например, java.lang. Система и java.lang. Строка. Все методы в заключительном классе являются неявно последними.

Как я могу достигнуть этого поведения в цели-c?

10
задан Peter Hosey 21 May 2010 в 09:42
поделиться

3 ответа

Вы не можете. Эффективность здесь не важна. Если вас так беспокоит безопасность, не используйте objective-c. Всегда найдется способ обойти любые меры, которые вы предпримете.

11
ответ дан 3 December 2019 в 17:57
поделиться

Как уже неоднократно говорилось, вы не можете.

Однако, если вы создаете библиотеку (в любом случае, это единственный случай, когда я вижу, что это актуально), вы можете предпринять несколько шагов. Ну, действительно, один.

Напишите в документации класса, что «Этот класс не предназначен для создания подклассов». (ссылка NSIndexSet ) или « Не отменять этот метод. » (ссылка + [NSApplication sharedApplication] .

В качестве объяснения, Стоит отметить, что (в значительной степени) все, что происходит в Obj-C и что отделяет его от C, происходит во время выполнения, а среда выполнения, так сказать, «прямо здесь». Любой фрагмент кода может проверять, видоизменять или извратить среду выполнения на досуге, делая Obj-C ужасно мощным языком, особенно в том, что касается его «метаязыковой» структуры.

7
ответ дан 3 December 2019 в 17:57
поделиться

В target-c нет окончательного эквивалента. Есть те же шаблоны, которые могут быть хорошей альтернативой, они дадут вам лучшее разделение, но ни производительность, ни безопасность:

  1. Если вы хотите разрешить перезапись только определенных методов с использованием делегата, шаблон может быть лучший выбор.
  2. Если вы вообще не хотите создавать подклассы, вы можете использовать шаблон абстрактной фабрики . Объявите открытый интерфейс + фабричные методы и скройте конкретные классы реализации.
4
ответ дан 3 December 2019 в 17:57
поделиться