关于堆栈和block之我见

刀锋你好,刀锋再见 刀锋你好,刀锋再见     2022-10-08     535

关键词:

临时变量存在栈里
对象存在堆里


关于block

c与oc最大的区别在于一个是静态语言一个是动态语言

先看看c 的写法

void testFunc() {
printf("hello world");
}

void testFuncPoint(void) {

void (*x)(void) = testFunc;
x();
}

 

 

c语言没有block一说,叫做函数指针,其实现机制是,函数入口是固定的,我只要知道函数入口就能正确的调用该函数,
因此将函数地址赋给函数指针,调用的时候直接使用该指针即可


再看看 oc
首先我尝试采用c写法,使用函数指针调用函数

void (*functionPoint)(void) = sayHello;

///////////////////////////////////
- (void)sayHello {
NSLog(@"hello world!");
}

 

实验结果: 语法错误编译器不支持该种语法

正确写法:

TestBlock block = ^(int x) {
x++;
};
block(5);

 

该种写法实现与c有着本质区别, 其本质是将代码拷贝至堆区并保留特定堆区指针,在调用的时候将地址赋给cs:ip寄存器,实现跳转至block的操作。


分析: oc是门动态语言,采用消息发送机制,函数的执行方法是 先找到对象 -> 读取函数列表 -> 匹配最合适的函数指针 -> 执行
如果采用c写法,第一必须在编译时确定函数的位置,第二将会破坏oc的这种实现机制
所以采用block这种设计方式便在情理之中

附上oc函数结构体

struct objc_method {
SEL _Nonnull method_name // 算则子名称
char * _Nullable method_types // 参数类型
IMP _Nonnull method_imp // 函数指针
}

 

启承转合——沟通管理之我见

...程,以求思想达成一致和感情的通畅。近年来,在中国,关于沟通的讨论,理论很多。每一个管理类的培训,开篇基本上是关于沟通管 查看详情

async和await之我见(代码片段)

...积压着的许多问题,所以写一篇博客来和大家分享一下。关于异步机制我认为只要记住的以下几点,就可以弄明白了:1.我认为async和awwait两个修饰符中最关键的是await,async是由于方法中包含await修饰符之后才在方法定义中添加... 查看详情

关于单点登录第一天接触之我见

前几天老大要搭好了项目框架,然后没要我继续跟进,而是做单点登录。我操,跨系统。有点紧张,礼拜天看了看单点登录。理论梳理:单点登录(SingleSignOn),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的... 查看详情

关于王小云破解md5之我见

CSDN一篇报道说中国数学家王小云等在Crypto2004上提出一种能成功攻破MD5的算法,GIGIX和王兄都在BLOG里引用了相关的报道。MD5是一种摘要算法,所以理论上是不可能从签名取得原文(见下面说明)。认为要从MD5的结果中取得原文才... 查看详情

httphelper之我见

    前几月一直用一个Http的访问类去调用WebApi,说句实话最开始没觉有什么,一是技术老,二是觉得比较简单,但是最近我一直关注云开发和AI这块儿微软技术,看到云平台调用API大多类似,所以回想这个早年的调... 查看详情

过拟合之我见

    查看详情

闭包之我见

一、闭包是什么?  · 闭包就是可以使得函数外部的对象能够获取函数内部的信息。  ·闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。... 查看详情

云服务之我见

说实话,虽然工作了十几年,但是很少写东西,今后努力多写的东西,记录一下这几年在it领域工作的一些心得,来和大家一起分享!首先说一下笔者工作的是一个二三线城市,有幸进入了一家云计算的工作,不过主营业务并不... 查看详情

快应用之我见

为了对抗微信小程序,安卓手机厂商联合起来推出了快应用,这是好事一件,但快应用的实现方式在我看来并不是一个最佳的方案。首先,既然是对抗小程序,就不应该学小程序的那一套类似于Vue的开发框架,而应该采用React框... 查看详情

手机app测试之我见

app端功能测试不是单纯的点点点,在实际的工作中,测试小白需要从业务入手,熟悉基本测试点、测试技巧和方法,以点带面,从功能和思维入手,避免眼高手低;app端测试,首先我们需要考虑不同的机型系统、不同的分辨率的... 查看详情

我之我见:ftp共享

目录1.ftp服务概述...11.1简介...11.2复合TCP连接...11.3数据连接模式...11.3.1主动模式...11.3.2被动模式...11.4数据传输模式...11.5ftp类型...12.部署ftp.22.1安装ftp.22.2ftp功能划分...22.2.1ftp访问控制...22.2.2ftp连接及传输控制...22.2.3ftp上传文件默... 查看详情

fec之我见一

顾名思义,FEC前向纠错,根据收到的包进行计算获取丢掉的包,而和大神沟通的结果就是纠错神髓:收到的媒体包+冗余包>=原始媒体包数据   直到满足 收到的媒体包+ 冗余包>=原始媒体包数据   ... 查看详情

谷歌全景拼接出错之我见

最近,一篇关于使用谷歌AI全景拼接技术对照片进行拼接出错的新闻引爆了社交网络。这和我前段时间所研究的Opencv全景拼接技术有关,因此这篇新闻也引起了我的兴趣。事件的起因是AlexHarker和他的朋友在加拿大路易斯... 查看详情

join()方法之我见

JavaScriptjoin()方法定义和用法join()方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。语法arrayObject.join(separator)参数描述separator可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分... 查看详情

编译原理之我见

     经过网上的调查,我发现编译原理并不像我所想象的那样简单,我以为编译原理其实就是像塑造一个翻译师一样,赋予它翻译的架构即可,但是经过调查后,结果却不是我所想,编译原理就是将高级语言翻... 查看详情

classpathxmlapplicationcontext源代码阅读之我见

由于本人的能力有限,只能说出自己的见解,如有错漏什么的,请大家批评指出。由于代码封装太多,这里只列出了我认为的部分最重要的代码,一些简单的封装代码,不在下面列出。由于代码太过于复杂,在本次博客中,只列... 查看详情

依赖倒置之我见

  .net程序员对面向对象设计原则以及设计模式的重视似乎不如Java,包括许多有经验.net的程序员,也并没有将面向对象的思想渗透进项目中。我本身就是这样一个例子。C#和Java都是面向对象的语言,设计模式对两者是通用的,... 查看详情

架构师之我见

...朋友也可以留言,我们共同探讨这个话题。 架构师之我见                                                                                  2009-08-06架构 查看详情