iOS-alloc对象指针与地址
以一个最简单的尝试验证:指针本身是一个变量,存放持有(指向)的内存地址。
Data *p1 = [Data alloc];
Data *p2 = [p1 init];
Data *p3 = [p1 init];
NSLog(@"%@",p1);
NSLog(@"%@",p2);
NSLog(@"%@",p3);
会输出什么?
指针的值,也就是指针指向的内存地址。
如果变一下呢?
Data *p1 = [Data alloc];
Data *p2 = [p1 init];
Data *p3 = [p1 init];
NSLog(@"%@ - %p",p1,p1);
NSLog(@"%@ - %p",p2,p2);
NSLog(@"%@ - %p",p3,p3);
以%p输出,p1、p2、p3结果会不一样吗?
结果是一样的。同样都是输出指针的值。证明,地址空间的创建来自于alloc。
再换一下呢?
Data *p1 = [Data alloc];
Data *p2 = [p1 init];
Data *p3 = [p1 init];
NSLog(@"%@ - %p - %p",p1,p1,&p1);
NSLog(@"%@ - %p - %p",p2,p2,&p2);
NSLog(@"%@ - %p - %p",p3,p3,&p3);
这下还一样吗?
终于不一样了!
原因是最后是取指针地址,输出的是指针变量本身的地址啦。可以看到指针是在栈上创建的,其每个大小为8个字节(64位下)。