Есть две части протокола соответствия:
- объект должен реагировать на необходимые сообщения в определении протокола
- объект должен вернуть
YES
, когда его спросили ли соответствует его к протоколу
Итак, можем ли мы организовать экземпляр NSObject
t o удовлетворяют этим двум условиям? Да. Фактически, есть по крайней мере два способа сделать это. Сначала давайте сделаем все экземпляры NSObject
соответствуют протоколу. Мы делаем это, чтобы определить методы протокола в категории по NSObject
, которая решает первую часть. Затем мы «swizzle» (что означает использование функции времени исполнения class_replaceMethod()
) -[NSObject conformsToProtocol:]
, возвращая YES
для нашего интересного протокола.
Теперь давайте представим, что вы хотите сделать конкретным экземпляр NSObject
соответствует протоколу. Это немного проще. Сначала создайте подкласс NSObject
, который соответствует протоколу и реализует необходимые методы; нет необходимости переопределять -conformsToProtocol:
, потому что библиотека времени выполнения может видеть, что этот класс соответствует. Теперь во время выполнения возьмите свой экземпляр NSObject
и вызовите object_setClass()
, чтобы переключить свой класс на соответствующий подкласс.
Есть еще одна часть соответствия протокола: 'class_conformsToProtocol()' – newacct
Отличный ответ, я считаю, что это проблема вокруг основной проблемы, она работает, я признаю, что подкласс и категории - это решения проблемы, моя цель - если какой-либо манекен объект в любом месте (независимо от класса) определен для ответа на протокол сообщений и определяет также, что «ДА» соответствует этому протоколу, поэтому нет необходимости устанавливать класс или подкласс или категорию, которая действует как план для этого объекта, вы может называть это «динамическим классом !!» То, как я сейчас обсуждаю, как-то новый, но я думаю, что это возможно Оцените свою озабоченность – Meseery