Когда мы создадим память для иваров на примере Singleton от Apple? - PullRequest
0 голосов
/ 30 января 2012

Я видел пример Apple синглтона и пару других примеров.Люди говорят, что это слишком строго!

Но дело в том ... даже если оно слишком строго, я хочу это понять.Я не понимаю, что когда мы вызываем allocWithZone для super, что происходит?

Память будет создаваться в соответствии с размером экземпляра super.

Что если в нашем Singleton есть ivars?

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW32

Я также не понимаю, почему allocWithZone возвращает объект с вызовом retain, когда метод retain возвращает объект таким, какой он есть.

1 Ответ

1 голос
/ 30 января 2012

Когда метод вызывается в Obj-C, ему передается ссылка на объект через скрытый параметр self.Для метода экземпляра self относится к объекту, к которому был вызван метод, для метода класса self относится к объекту класса (типа Class), к которому был вызван метод.Вызовы super неявно передаются на self.

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

Как вы правильно заметили, вызов retain в allocWithZoneбессмысленно, но безобидно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...