block 捕获自动变量的瞬间值;

注释在代码中;请参考傻瓜学编程之block_3

import "People.h"
@interface People()
{
int yourNameis; }
@end @implementation People
-(instancetype)init{
if ( [super init]) {
[self myBlcokTest];
}
return self; } - (void)myBlcokTest{
int ddkknn = 555555;
char bbb = '3';
const char *fmt = &bbb;
void (^blk)()=^{
printf("%d",ddkknn);
printf("%s",fmt); };
blk(); }
// 变量直接添加 属性生成_xxxx;
struct People_IMPL {
struct NSObject_IMPL NSObject_IVARS;
int yourNameis;
NSString *_thisIsPro;
}; /**
1、结构体内部生成的成员变量与声明的成员变量的类型相同;
2、block语法中没有使用的自动变量不会被追加,只有在block语法中使用的自动变量才会被追加;
3、根据构造函数传递过来的参数对追加的成员变量进行初始化;
*/
struct __People__myBlcokTest_block_impl_0 {
struct __block_impl impl;
struct __People__myBlcokTest_block_desc_0* Desc;
int ddkknn;
const char *fmt;
__People__myBlcokTest_block_impl_0(void *fp, struct __People__myBlcokTest_block_desc_0 *desc, int _ddkknn, const char *_fmt, int flags=0) : ddkknn(_ddkknn), fmt(_fmt) {
impl.isa = &_NSConcreteStackBlock;
impl.Flags = flags;
impl.FuncPtr = fp;
Desc = desc;
} // 相当于:
__People__myBlcokTest_block_impl_0(void *fp, struct __People__myBlcokTest_block_desc_0 *desc, int _ddkknn, const char *_fmt, int flags=0) : ddkknn(_ddkknn), fmt(_fmt) {
impl.isa = &_NSConcreteStackBlock;
impl.Flags = flags;
impl.FuncPtr = fp;
Desc = desc;
ddkknn = 5555;
fmt = '3';
}
}; //此时使用的是保存在__People__myBlcokTest_block_impl_0结构体实例的成员变量中那些自动变量的值 即(int ddkknn;
//const char *fmt;) 也就是截获自动变量 就是在执行block时,block所使用的自动变量保存在block 的结构体实例中;
static void __People__myBlcokTest_block_func_0(struct __People__myBlcokTest_block_impl_0 *__cself) {
int ddkknn = __cself->ddkknn; // bound by copy
const char *fmt = __cself->fmt; // bound by copy printf("%d",ddkknn);
printf("%s",fmt); } static struct __People__myBlcokTest_block_desc_0 {
size_t reserved;
size_t Block_size;
} __People__myBlcokTest_block_desc_0_DATA = { 0, sizeof(struct __People__myBlcokTest_block_impl_0)}; static void _I_People_myBlcokTest(People * self, SEL _cmd) {
int ddkknn = 555555;
char bbb = '3';
const char *fmt = &bbb;
void (*blk)()=((void (*)())&__People__myBlcokTest_block_impl_0((void *)__People__myBlcokTest_block_func_0, &__People__myBlcokTest_block_desc_0_DATA, ddkknn, fmt));
((void (*)(__block_impl *))((__block_impl *)blk)->FuncPtr)((__block_impl *)blk); }

傻瓜学编程之block_3的更多相关文章

  1. 傻瓜学编程之block_1

    1.引出 1.1.int pp = 3;for循环为dd赋值并 调用 finprint(int ,int)函数 获取pp*dd的乘积,输出 void finalValue(int d, int sca ...

  2. 傻瓜学编程之block_2

    block的实质 以一个简单的实现为列子: - (void)myBlcokTest{ void (^blk)()=^{ printf(@“beijinghuanyingni”); }; blk(); ...

  3. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  4. 2017“编程之美”终章:AI之战勇者为王

    编者按:8月15日,第六届微软“编程之美”挑战赛在选手的火热比拼中圆满落下帷幕.“编程之美”挑战赛是由微软主办,面向高校学生开展的大型编程比赛.自2012年起,微软每年都在革新比赛命题.紧跟时代潮流, ...

  5. 网络编程之TCP/IP各层详解

    网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只 ...

  6. Python Flask高级编程之RESTFul API前后端分离精讲 (网盘免费分享)

    Python Flask高级编程之RESTFul API前后端分离精讲 (免费分享)  点击链接或搜索QQ号直接加群获取其它资料: 链接:https://pan.baidu.com/s/12eKrJK ...

  7. Python网络编程之TCP套接字简单用法示例

    Python网络编程之TCP套接字简单用法示例 本文实例讲述了Python网络编程之TCP套接字简单用法.分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而jav ...

  8. Python Flask高级编程之从0到1开发《鱼书》精品项目

    Python Flask高级编程之从0到1开发<鱼书>精品项目     整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感 ...

  9. Java并发编程之CAS二源码追根溯源

    Java并发编程之CAS二源码追根溯源 在上一篇文章中,我们知道了什么是CAS以及CAS的执行流程,在本篇文章中,我们将跟着源码一步一步的查看CAS最底层实现原理. 本篇是<凯哥(凯哥Java: ...

随机推荐

  1. struts2常量配置

    常量提供了一个简单的方法来定制Struts应用程序通过定义关键设置修改插件框架和行为. struts-default.xml—基础xml,默认包含这个文件是自动装入struts.xml文件,当我们进行 ...

  2. 如何引入iconfont图标与Element-UI组件

    一.iconfont图标 iconfont方便又好用,介绍一下如何在vue项目中引入iconfont 1.进入iconfont官网 www.iconfont.cn 2.登录自己账户 3.选择图标后下载 ...

  3. 移动端调用ArcGIS Server 10.1服务

    1.最好用mdb数据源,不要用shp文件作为数据源,一是属性字段长度超过5个字符会被截断,二是中文会变成乱码. 2.mxd的layer的坐标系要是WGS1984(4362),不然属性查询不出来.

  4. tp5.0隐藏路由后缀index.php

    一开始的路由是有index.php结尾的 接下来开始修改主要文件

  5. MongoDB慢查询性能分析

    最近,长期运营后的港台服出现一个问题,web充值很慢,用gm指令查询玩家信息也很慢.最后定位到MongoDB查询也很慢.   刚开始定位的时候,运营SA直接查指定的玩家,并反映很慢,就猜测是索引的问题 ...

  6. hdu 1698 (延迟标记+区间修改+区间求和)

    In the game of DotA, Pudge's meat hook is actually the most horrible thing for most of the heroes. T ...

  7. Linux 系统的总管 Systemd

    目录 1. init的进化,全功能的Systemd 2 1.1 Linux系统中,init主要有3个版本 2 1.2 比较传统的init程序,Systemd的特点有: 2 1.3 Systemd Jo ...

  8. Javascript 4.3 事件处理函数

    鼠标指针悬停在某个元素上时触发一个动作:onmouseover事件处理函数 鼠标指针离开某个元素时触发一个动作:onmouseout事件处理函数 点击某个链接时触发一个动作:onclick事件处理函数 ...

  9. ubuntu 上安装node.js 的简单方法

    一.安装 1.$ sudo apt-get install nodejs 2.$ sudo apt-get install npm 二.升级     1.升级npm命令如下: $ sudo npm i ...

  10. 编程总结5&学习总结

    基础题目 请在第一周作业的基础上,继续完成:找出给定的文件中数组的最大值及其对应的最小下标(下标从0开始).并将最大值和对应的最小下标数值写入文件. 输入:请建立以自己英文名字命名的txt文件,并输入 ...