Objective-C Runtime - PullRequest
       24

Objective-C Runtime

6 голосов
/ 09 января 2010

Справочник по Objective-C говорит:

«Устаревшее» ниже означает «устарело в Mac OS X версии 10.5 для 32-разрядного кода и не разрешено для 64-разрядного кода».

и я хотел бы использовать class_setSuperclass в Max OS X версии 10.5, хотя я все еще могу это сделать, компилятор выдает предупреждение, сообщающее мне, что он устарел, но он все еще собирается и Bundle все еще пригоден для использования.

Мой вопрос: что будет эквивалентно в Max OS X 10.5?

Ответы [ 2 ]

5 голосов
/ 09 января 2010

Скорее всего, это не очень хорошая идея. Я знаю, что при переходе к 64-битной среде некоторые вещи во время выполнения изменились и не имели замены.

В документах даже явно сказано не трогать, и это не исключение.

Однако вы можете использовать class_addMethod, чтобы добавить функциональность в данный ранее существующий класс. Тем не менее, это также выполнимо через категории.

Вы также можете использовать class_replaceMethod для переопределения метода, другой возможный метод - использовать категорию (или class_addMethod) для добавления метода замены. Затем, используя method_exchangeImplementations, вы можете поменять их местами так, чтобы оригинал оставался доступным для вызова.

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

1 голос
/ 09 января 2010

Не может быть прямого эквивалента.

Я знаю, что каждый раз, когда я играл с иерархией классов во время выполнения, меня сжигали. Вы должны быть в состоянии достичь тех же результатов, хотя и более многословно с помощью делегирования, и я думаю, что они этого хотят.

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