2015-10-09 32 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,那麼你可以期望它顯示在堆棧跟蹤中。這就是調用堆棧的工作原理。