Альтернатива poseAsClass в Mac OS X 10.5 и выше?

Apple объявила NSObject устаревшей poseAsClass: для OS X v10.5 и выше. Есть ли другой способ заставить класс позировать?


person e.James    schedule 17.08.2009    source источник


Ответы (3)


Я не думаю, что есть эквивалент на уровне класса, но вы можете поменять реализацию двух методов, что часто было целью использования poseAsClass: (конечно, вы можете заменить более одного метода, если вам нужно переопределить несколько методов в класс). Вам нужны method_exchangeImplementations в среде выполнения Objective-C 2.0 (#import objc/runtime.h). Предупреждение: после вызова method_exchangeImplementations вызов «нового» метода фактически вызывает исходное определение метода.

person Barry Wark    schedule 17.08.2009
comment
Благодарю вас! Мне удалось заставить это работать, используя комбинацию ответа mcandre и документации, на которую вы ссылались. Небольшое примечание: мне пришлось #include "objc/runtime.h" использовать описанные вами методы. - person e.James; 18.08.2009

Lap Cat дает альтернативу.

person mcandre    schedule 17.08.2009

Что ты пытаешься сделать? Часто есть способы обойти позирование. Хотя, соглашусь, иногда это единственный выход :)

person Jonathan Dann    schedule 18.08.2009
comment
Я пытаюсь отслеживать все сообщения о привязке (и отмене привязки) в приложении Cocoa. Я хочу NSLog() получать некоторую отладочную информацию всякий раз, когда выполняется привязка между одним объектом и другим. В итоге я использовал method_exchangeImplementations в методах привязки для NSObject, и это помогло. - person e.James; 18.08.2009
comment
Похоже, вы все делаете правильно :) Я бы поостерегся делать это в коде доставки. - person Jonathan Dann; 19.08.2009