2015-10-09 7 views
1

Я пытаюсь понять стек памяти. Я запускаю свой проект и проверяю, как изменяется стек, а при прохождении через проект «шаг за шагом».Почему метод alloc не показан в стеке вызовов?

я шаг к чему-то вроде этого:

myClass *tmp = [[myClass alloc] init]; 

и после того, что я вижу:

0-[myClass init] 
1-[AppDelegate application:didFinishLaunchingWithOptions:] 
... 

нет Почему нет [myClass alloc] между 0 и 1? Я предполагаю, что это происходит, потому что реализация alloc закрыта?

ответ

3
myClass* tmp = [[myClass alloc] init]; 

эквивалентно:

myClass* x = [myClass alloc]; 
myClass* tmp = [x init]; 

Так init работает на результат alloc. Другими словами, когда init происходит, alloc должен быть уже завершен и возвращен.

+0

спасибо. Это ясно. – IgorNikolaev

0

Если allocназываетсяinit, то вы можете ожидать, что он появится в трассировке стека. Вот как работает стек вызовов.

 Смежные вопросы

  • Нет связанных вопросов^_^