iOS学习笔记iOS程序猿IOS

简单的打印、神奇的本质

2018-11-09  本文已影响106人  CoderHG

本来想把标题命名为 【OCBlock 的本质】。
废话不多说,直接往下看。

有几句简单的代码,望君记下:

NSObject* obj;
printf("1 = %p\n", &obj);
void (^block)(void) = ^{
    printf("2 = %p\n", &obj);
};
printf("3 = %p\n", &obj);
block();
printf("4 = %p\n", &obj);

接下来,为了简单方便,直接使用图片了。

场景一

image.png

除了红框框中的打印,其它的都一样。换句话说,在 block 中的 obj 的地址变了,同一个东西,地址尽然还变了,这是什么个情况???同时也要注意地址变化的位置,貌似相隔甚远呐。

场景二

image.png

是的、没有看错,相比于场景一,就多了一个 __block 修饰符。除了 block 定义之前的都变了,尤其是第3个,block 还没被执行呢,还跟着凑什么热闹,尽然也变了。同样,也看一下变化的地址。

场景三

image.png

是的、你依然没有看错,仅仅是变了一个修饰符 static。这一次就更加的厉害了,都没有变。但是,不要忘记了看看这一次的地址,与场景一、二的有什么不同。答案是长度不同,对的、可以这么回答。

说吧

看完了上面的三张图片,你就没有什么要跟我说的吗?好吧、不说的话,就直接看最后的总结吧。

总结

image.png
你知道这到底是为什么吗?
上一篇 下一篇

猜你喜欢

热点阅读