Использование категории для переопределения метода NSURL

Вопросы категории:

Я хотел бы разместить категорию в NSURL, которая, помимо других вещей, переопределяет метод запроса, чтобы иметь возможность предоставлять строку запроса из URL-адреса, который не соответствует RFC 1808. Является ли законным делать что-то подобное в моей категории:

- (NSString *)query //real NSURL method { if (stringIsRFC1808) //want to get the default implementation return [super query]; else return somethingElse; //want to get my custom implementation } 

благодаря

Код as-is недопустим, потому что вы используете [super query] – это не совсем то, что вы ожидаете от этого. Категории не являются суперклассами. Здесь [super query] попытается вызвать - [NSObject query] – BOOM – непризнанная ошибка селектора. Если вы используете категории для расширения класса, вы не сможете вызвать исходный метод – если вам не нужна эта функциональность, то использование категорий в порядке, если вам это нужно, однако вы должны рассмотреть подклассы , (даже лучший состав для объектных объектов !) или использование среды выполнения Objective-C для выполнения swizzling метода – таким образом, у вас будет доступ к первоначальной реализации метода.

Вы не должны использовать категории для переопределения существующих методов. Категории используются для улучшения поведения класса без его подклассификации. (Хотя я думаю, что вы можете переопределить, Apple категорически не приветствует)

Добавьте свой собственный метод, чтобы не конфликтовать с яблочным sdk. Подумайте, кто-то из вашей компании использует эту категорию: первое, что он делает, – это изучить библиотеки разработчиков, чтобы знать, что делает этот метод.

После импорта вашей категории он больше не делает того, что должен делать. Apple не рекомендует это!