diff --git "a/01\343\200\212\346\213\233\350\201\230\344\270\200\344\270\252\351\235\240\350\260\261\347\232\204iOS\343\200\213\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210/\343\200\212\346\213\233\350\201\230\344\270\200\344\270\252\351\235\240\350\260\261\347\232\204iOS\343\200\213\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.md" "b/01\343\200\212\346\213\233\350\201\230\344\270\200\344\270\252\351\235\240\350\260\261\347\232\204iOS\343\200\213\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210/\343\200\212\346\213\233\350\201\230\344\270\200\344\270\252\351\235\240\350\260\261\347\232\204iOS\343\200\213\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.md" index 7a87403..2d0e53e 100644 --- "a/01\343\200\212\346\213\233\350\201\230\344\270\200\344\270\252\351\235\240\350\260\261\347\232\204iOS\343\200\213\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210/\343\200\212\346\213\233\350\201\230\344\270\200\344\270\252\351\235\240\350\260\261\347\232\204iOS\343\200\213\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.md" +++ "b/01\343\200\212\346\213\233\350\201\230\344\270\200\344\270\252\351\235\240\350\260\261\347\232\204iOS\343\200\213\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210/\343\200\212\346\213\233\350\201\230\344\270\200\344\270\252\351\235\240\350\260\261\347\232\204iOS\343\200\213\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\357\274\210\344\270\213\357\274\211.md" @@ -691,13 +691,19 @@ autoreleasepool 以一个队列数组的形式实现,主要通过下列三个函 2016-05-17 02:03:33.559 LeanCloudChatKit-iOS[1505:713679] block内部: 0x155b22fc8 ``` - 他们三个的内存地址转成10进制就是 + +“定义后”和“block内部”两者的内存地址是一样的,我们都知道 block 内部的变量会被 copy 到堆区,“block内部”打印的是堆地址,因而也就可以知道,“定义后”打印的也是堆的地址。 + + + 那么如何证明“block内部”打印的是堆地址? + + 把三个16进制的内存地址转成10进制就是: 1. 定义后前:6171559672 2. block内部:5732708296 3. 定义后后:5732708296 -中间相差 418.5M 的空间,又因为iOS中栈区的内存只有1M,Mac也只有8M,显然a已经是在堆区了。 +中间相差438851376个字节,也就是 418.5M 的空间,因为堆地址要小于栈地址,又因为iOS中栈区的内存只有1M,Mac也只有8M,显然a已经是在堆区了。 这也证实了我们的猜测:a 在定义前是栈区,但只要进入了 block 区域,就变成了堆区。这才是 `__block` 关键字的真正作用。