В чем разница между категорией и расширением класса. Я считаю, что оба используются для добавления пользовательских методов в существующие классы. Может кто-то пролить свет на это? Пример с кодом будет очень признателен.
Категория - это способ добавления методов к существующим классам. Обычно они находятся в файлах с именем «Class + CategoryName.h», например «NSView + CustomAdditions.h» (и, конечно, .m).
Расширение класса - это категория, за исключением двух основных отличий:
Категория не имеет имени. Он объявлен так:
@interface SomeClass ()@end- (недействительно) anAdditionalMethod;
Реализация расширения должна находиться в основном блоке @implementation файла.
Довольно часто можно увидеть расширение класса в верхней части файла .m, объявляющее больше методов класса, которые затем реализуются ниже в основном разделе @implementation класса. Это способ объявления «псевдоприватных» методов (псевдо-частных в том смысле, что они не совсем частные, просто не доступны извне).