Есть одна часть, которая немного отключена.
На самом деле вызов будет одним из этих трех:
objc_msgSend(p, @selector(getSex))
objc_msgSend_fpret(p, @selector(getSex))
objc_msgSend_stret(p, @selector(getSex))
Одно из различий состоит в том, что первый аргумент относится к объекту, а не кthe class.
Кроме того, поскольку вы не поделились тем, что возвращает метод getSex
, мы не можем знать, будет ли это одна из версий fpret
/ stret
или нет.Если метод возвращает значение double (на определенных платформах), будет использоваться версия fpret
.Если метод возвращает структурное значение (на определенных платформах), то будет использоваться версия stret
.Все остальные будут использовать стандартную версию.Все это зависит от платформы многими различными способами.
Как уже говорили другие, при выделении будут созданы объекты со всеми переменными экземпляра, установленными на 0
/ NULL
, а также действительный указатель isa
.Методы инициализации могут или не могут обновлять переменные экземпляра с чем-то значимым.