2015-10-09 35 views
1

我想了解内存堆栈。我运行我的项目并检查堆栈如何变化,同时通过“踏入”来移动项目。为什么alloc方法未在调用堆栈中显示?

我走进来是这样的:

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

之后,我看到:

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

为什么有0和1之间没有[myClass alloc]? 我想这是因为执行alloc已关闭?

回答

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

等同于:

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

所以init上的alloc的结果进行操作。换句话说,当init发生时alloc必须已经完成并返回。

+0

谢谢。这是很清楚的。 – IgorNikolaev

0

如果alloc调用init,那么你可以期望它显示在堆栈跟踪中。这就是调用堆栈的工作原理。