Я создал singleton-класс, и я хочу создать класс, который является подклассом этого singleton-класса, что корректный метод должен сделать это
Если Джон не убедил вас не делать этого, вы должны сделать это следующим образом:
В своем суперклассе запустите экземпляр синглтона с [[[self class] alloc] init]
, поэтому вы всегда получаете экземпляр класса, с которым вы вызываете метод sharedInstance. И вам не нужно перезаписывать метод sharedInstance в своем подклассе.
[SuperClass sharedInstance] //-> instance of SuperClass
[SubClass sharedInstance] //-> instance of Class
Я не знаю, в частности, об Objective-C, но в целом одноэлементные классы должны предотвращать создание подклассов. Если у вас есть экземпляр базового класса и экземпляр подкласса, то у вас фактически есть два объекта, которые вы можете рассматривать как экземпляры базового «одноэлементного» класса, не так ли?
Как только у вас есть два экземпляра, это уже не синглтон ... и это не учитывает возможности того, что существует несколько подклассов или что сам подкласс позволяет создавать несколько экземпляров.
Конечно, вы можете изменить свой базовый класс, чтобы у него был только способ получить один экземпляр «по умолчанию», но это не совсем то же самое, что сделать его синглтоном.