以一個最簡單的嘗試驗證:指針本身是一個變量物赶,存放持有(指向)的內(nèi)存地址白指。
BuyReadListModel * p1 = [BuyReadListModel alloc];
BuyReadListModel * p2 = [p1 init];
BuyReadListModel * p3 = [p1 init];
NSLog(@"%@",p1);
NSLog(@"%@",p2);
NSLog(@"%@",p3);
會輸出什么留晚?
指針的值酵紫,也就是指針指向的內(nèi)存地址。
如果變一下呢错维?
BuyReadListModel * p1 = [BuyReadListModel alloc];
BuyReadListModel * p2 = [p1 init];
BuyReadListModel * p3 = [p1 init];
NSLog(@"%@ - %p",p1,p1);
NSLog(@"%@ - %p",p2,p2);
NSLog(@"%@ - %p",p3,p3);
以%p輸出奖地,p1、p2赋焕、p3結(jié)果會不一樣嗎参歹?
結(jié)果是一樣的。同樣都是輸出指針的值隆判。證明犬庇,地址空間的創(chuàng)建來自于alloc。
再換一下呢侨嘀?
BuyReadListModel * p1 = [BuyReadListModel alloc];
BuyReadListModel * p2 = [p1 init];
BuyReadListModel * p3 = [p1 init];
NSLog(@"%@ - %p - %p",p1,p1,&p1);
NSLog(@"%@ - %p - %p",p2,p2,&p2);
NSLog(@"%@ - %p - %p",p3,p3,&p3);
這下還一樣嗎臭挽?
終于不一樣了!
原因是最后是取指針地址咬腕,輸出的是指針變量本身的地址啦欢峰。可以看到指針是在棧上創(chuàng)建的涨共,其每個大小為8個字節(jié)(64位下)纽帖。