Вы видите это, потому что NSString является кластером классов. См. Документацию Apple здесь для общего объяснения и здесь для примечаний, касающихся подклассов NSString. По сути, NSString - это абстрактный класс без метода хранения символов, а различные методы -initWith… возвращают разные конкретные подклассы NSString, основанные на методе инициализации. Обычно, когда вы используете NSString, это полностью прозрачно. Однако, если вы хотите создать подкласс NSString, вы должны по крайней мере реализовать базовые методы (-length и -characterAtIndex :) плюс любые методы init, которые вы хотите иметь (плюс, очевидно, есть способ хранения символов строки ).
Если вы просто хотите добавить функциональность в NSString, подклассы обычно не нужны. Во-первых, вы должны проверить, будет ли работать лучше категория, или функция, работающая на NSString, или метод класса, который содержит NSString. Например, см. RegexKit или Google Toolbox для Mac , в которых реализована поддержка регулярных выражений с использованием категории на NSString.