美文网首页iOS学习笔记iOS程序猿IOS
简单的打印、神奇的本质

简单的打印、神奇的本质

作者: CoderHG | 来源:发表于2018-11-09 23:36 被阅读106次

本来想把标题命名为 【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
你知道这到底是为什么吗?

相关文章

  • 简单的打印、神奇的本质

    本来想把标题命名为 【OC 中 Block 的本质】。废话不多说,直接往下看。 有几句简单的代码,望君记下: 接下...

  • Block的本质和类型

    Block的本质 下图是打印结果: 从打印结果可以看出block本质上也是继承自NSObject的OC对象; 将上...

  • 07-description

    description 背景: %@是用来打印对象的, 其实%@的本质是用于打印字符串 只要利用%@打印某个对象,...

  • 06-10、重写NSObject中的对象方法descriptio

    可以重写description方法, 返回我们需要打印的内容%@是用来打印对象的, 其实%@的本质是用于打印字符串...

  • Python高级(4)烤地瓜

    本质 调用方法,传递数据,打印结果

  • 【转】让强大的console家族助你一臂之力

    此为转载文章,原文链接在底部~ 我们在控制台打印一下console,看看它还有哪些神奇的方法: 下面我们从最简单的...

  • 10行Node代码开发一个命令行字典

    开发命令行原理 看似很神奇的功能,其实本质十分简单。 #!/usr/bin/env node这句话,告诉了 *ni...

  • 神奇的3D打印

    有一天,爸爸带回一个乳的色的躺椅锁扣,我觉得是塑料做成的。他神秘地告诉我:“这可是高级的3D打印机的工劳哦。”“不...

  • 问题[○○]:什么是block

    block定义 其本质是两个结构体 举个例子block1.jpg定义一个最简单block 打印hello worl...

  • python 装饰器学习

    最简单的装饰器 本质上,decorator就是一个返回函数的高阶函数。所以,我们要定义一个能打印日志的decora...

网友评论

    本文标题:简单的打印、神奇的本质

    本文链接:https://www.haomeiwen.com/subject/xnuaxqtx.html