为什么Objective-C块语法与方法语法如此不同?
问题说明了一切。原因:为什么Objective-C块语法与方法语法如此不同?,objective-c,methods,syntax,objective-c-blocks,Objective C,Methods,Syntax,Objective C Blocks,问题说明了一切。原因: (void)methodWithParamA:(id)paramA paramB:(id)paramB; [obj methodWithParamA:valA paramB:valB]; 以及: 我不确定通过学习这个问题的答案我是否一定会有所收获,但我很困惑,一种语言可以有这么多不同的语法…一个块就是一个函数,没有“当前实例”(或调用方法的“当前类”)和一个方法一样 因此,块调用看起来像函数调用;“block”类型是指针类型,并且非常接近函数指针类型的语法;块体紧跟函数
(void)methodWithParamA:(id)paramA paramB:(id)paramB;
[obj methodWithParamA:valA paramB:valB];
以及:
我不确定通过学习这个问题的答案我是否一定会有所收获,但我很困惑,一种语言可以有这么多不同的语法…一个块就是一个函数,没有“当前实例”(或调用方法的“当前类”)和一个方法一样
因此,块调用看起来像函数调用;“block”类型是指针类型,并且非常接近函数指针类型的语法;块体紧跟函数体的语法
块在C中是受支持的,它有函数,但没有方法。后者是(几乎)普通的C,就像Objective C中的许多与对象无关的东西一样。方括号的东西是Objective C对处理对象的语言的扩展。在这方面,该语言与C语言有很大的不同,但保持了很多类似C的风格(我认为主要是为了与C库头兼容)。关于可能有帮助的话题you@Dave-后者是普通C。它几乎不是普通C。@ArtOfWarfare非标准扩展不是普通C。读了这篇文章,我不禁要问对应的问题:为什么Objective-C方法的方括号空格分隔参数语法?我现在正在学习积木,我觉得奇怪的是它们在语法上与方法如此不同。在阅读您关于块是基于C函数建模的解释后,现在我又开始想,Objective-C方法看起来很奇怪……我猜@Dave在上面的评论中回答了这个问题——Objective-C方法是在C函数之后出现的,语言创建者认为它们需要一种完全不同的语法。唉。@ericsoco-在Objective-C中,当您向对象发送消息以调用方法时,您调用一个函数。这两个过程完全不同。前者是直接的和静态的——它决定了编译时的最终位置。后者是间接的和动态的——在运行时执行搜索以找到与消息匹配的方法,这可能会失败。因此,使用不同的语法是很有意义的,语法遵循Smalltalk的语法。在C++中,方法调用与函数调用没有区别,它们使用类似的语法。@ ErCoSoCo:由SaleTalk的空间部分分隔的关键字冒号参数短语是SMALLATTS。我认为方括号只是为了使新语法不与C语法冲突。
void(^ block)(id paramA, id paramB);
block(valA, valB);