iOS-alloc对象指针与地址

以一个最简单的尝试验证:指针本身是一个变量,存放持有(指向)的内存地址。

    BuyReadListModel * p1 = [BuyReadListModel alloc];
    BuyReadListModel * p2 = [p1 init];
    BuyReadListModel * p3 = [p1 init];
    NSLog(@"%@",p1);
    NSLog(@"%@",p2);
    NSLog(@"%@",p3);

会输出什么?


image.png

指针的值,也就是指针指向的内存地址。

如果变一下呢?

    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结果会不一样吗?


image.png

结果是一样的。同样都是输出指针的值。证明,地址空间的创建来自于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);

这下还一样吗?


image.png

终于不一样了!

原因是最后是取指针地址,输出的是指针变量本身的地址啦。可以看到指针是在栈上创建的,其每个大小为8个字节(64位下)。

你可能感兴趣的:(iOS-alloc对象指针与地址)