Когда метод вызывается в Obj-C, ему передается ссылка на объект через скрытый параметр self
.Для метода экземпляра self
относится к объекту, к которому был вызван метод, для метода класса self
относится к объекту класса (типа Class
), к которому был вызван метод.Вызовы super
неявно передаются на self
.
Поэтому в примере кода Apple вызов [super allocWithZone:NULL]
вызывает супер реализацию allocWithZone
, передавая текущее значение self
, равное MyGizmoClass
Классовый объект как статический метод.Реализация allocWithZone
может определить требуемый объем памяти из переданного объекта Class
- подробности о том, как являются частными.
Как вы правильно заметили, вызов retain
в allocWithZone
бессмысленно, но безобидно.