我想了解内存堆栈。我运行我的项目并检查堆栈如何变化,同时通过""步骤进入"。
我介入这样的事情:
myClass *tmp = [[myClass alloc] init];
然后我看到:
0-[myClass init]
1-[AppDelegate application:didFinishLaunchingWithOptions:]
...
为什么0到1之间没有[myClass alloc]
?
我想这是因为alloc
的实现已经关闭了吗?
答案 0 :(得分:3)
myClass* tmp = [[myClass alloc] init];
相当于:
myClass* x = [myClass alloc];
myClass* tmp = [x init];
因此init
对alloc
的结果进行操作。换句话说,当init
发生时,alloc
必须已经完成并返回。
答案 1 :(得分:0)
如果alloc
调用 init
,那么您可以预期它会显示在堆栈跟踪中。这就是调用堆栈的工作方式。