主動已經是我對熱愛東西表達的極限了
- 分析
alloc
的源碼,看看alloc
都干些了什么?
在分析之前,先看看對象他們之間的區別都有哪些?定義對象如下:
LGPerson *p1 = [LGPerson alloc];
LGPerson *p2 = [p1 init];
LGPerson *p3 = [p1 init];
LGNSLog(@"%@ - %p - %p",p1,p1,&p1);
LGNSLog(@"%@ - %p - %p",p2,p2,&p2);
LGNSLog(@"%@ - %p - %p",p3,p3,&p3);
并打印出結果對其進行分析
打印結果
結果:
p1
,p2
,p3
一級指針直接訪問內容是相同的
p1
,p2
,p3
對象指針指向的的內存地址相同(內存地址相同)
p1
,p2
,p3
對象的指針地址不同(指針地址不同)
說明:
%p -> p1
表示對象指針指向的的內存地址
%p -> &p1
表示對象的指針地址
- 總結 :
TTperson
向系統內存申請空間,申請的內存空間為p1
,init
沒有對原來的內存空間做任何處理,內存的申請來自于alloc
,TTPerson
開辟內存空間,p1
,p2
,p3
對象的指針地址不同,但他們指向的內存空間是一致的
關系圖
那么問題來了,alloc
又是如何開辟內存空間的?
棧內存是連續的,指針8字節
alloc 邏輯圖