Переопределить метод с использованием категории, если этот метод уже определен в категории

У меня есть следующий код, который я использую.

@interface SomeDudesSuperClass : NSObject {

}

@end

@interface SomeDudesSuperClass (Category_code_which_others_are_restricted_from_touching)

- (void)SomeDudesMethod;

@end

Теперь это ниже мой код

@interface SomeDudesSuperClass (A_Category_To_Override_A_Method_in_his_category) {

- (void)SomeDudesMethod;

}

@end

Мне не разрешено трогать его код. Если я просто напишу другую категорию, какой метод будет вызван? И как я могу вызвать свой метод категории вместо его?


person Just a coder    schedule 12.06.2014    source источник
comment
Плохая идея переопределять методы с помощью категорий. Поведение не определено.   -  person rmaddy    schedule 12.06.2014
comment
@rmaddy хорошо .. в таком случае, как мой .. есть ли какие-то возможные обходные пути? Я не могу коснуться его кода...   -  person Just a coder    schedule 12.06.2014


Ответы (1)


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

  1. Подкласс SomeDudesSuperClass и переопределить метод там.

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

Эта статья написана У Майка Эша есть очень хорошее объяснение этому.

person Dima    schedule 12.06.2014
comment
шипение это. я думал об этом, но не был уверен - person Just a coder; 12.06.2014
comment
Во-первых, когда вы говорите «Переопределить его класс», вы имеете в виду подкласс, верно? - person Just a coder; 12.06.2014
comment
Упс, точно знаю! Отредактирую мой ответ. - person Dima; 12.06.2014