Apple объявила NSObject
устаревшей poseAsClass:
для OS X v10.5 и выше. Есть ли другой способ заставить класс позировать?
Альтернатива poseAsClass в Mac OS X 10.5 и выше?
Ответы (3)
Я не думаю, что есть эквивалент на уровне класса, но вы можете поменять реализацию двух методов, что часто было целью использования poseAsClass:
(конечно, вы можете заменить более одного метода, если вам нужно переопределить несколько методов в класс). Вам нужны method_exchangeImplementations в среде выполнения Objective-C 2.0 (#import objc/runtime.h
). Предупреждение: после вызова method_exchangeImplementations вызов «нового» метода фактически вызывает исходное определение метода.
person
Barry Wark
schedule
17.08.2009
Благодарю вас! Мне удалось заставить это работать, используя комбинацию ответа mcandre и документации, на которую вы ссылались. Небольшое примечание: мне пришлось
#include "objc/runtime.h"
использовать описанные вами методы.
- person e.James; 18.08.2009
Что ты пытаешься сделать? Часто есть способы обойти позирование. Хотя, соглашусь, иногда это единственный выход :)
person
Jonathan Dann
schedule
18.08.2009
Я пытаюсь отслеживать все сообщения о привязке (и отмене привязки) в приложении Cocoa. Я хочу
NSLog()
получать некоторую отладочную информацию всякий раз, когда выполняется привязка между одним объектом и другим. В итоге я использовал method_exchangeImplementations
в методах привязки для NSObject
, и это помогло.
- person e.James; 18.08.2009
Похоже, вы все делаете правильно :) Я бы поостерегся делать это в коде доставки.
- person Jonathan Dann; 19.08.2009