gpt4 book ai didi

objective-c - @selector 指令有什么用?为什么不简单地使用方法的名称呢?

转载 作者:太空狗 更新时间:2023-10-30 03:32:32 24 4
gpt4 key购买 nike

我阅读了很多文章来理解为什么必须使用@selector() 来引用一个方法,但我认为我并不满意。例如,当我们为按钮指定一个 Action 时,我们必须写:

[btn addTarget:self action:@selector(myMethod)];

为什么不简单:

[btn addTarget:self action:myMethod];

请解释需求和原因,以及没有它会发生什么。

最佳答案

I have read many articles in order to understand the @selector keyword but I dstill don't quite understand its purpose. I just want to ask why we have @selector.

这一切都与解析C语言有关。

就其本身而言,在像 [obj performSelector:someRandomSelector]' 这样的表达式中,编译器将 someRandomSelector 位视为“扩展任何 someRandomSelector 是-- 评估表达式,处理#defines,为以后的链接放置一个符号,等等... -- 扩展产生的任何东西最好是 SEL。

因此,如果您要编写 [obj performSelector:action]',编译器将无法知道 action 作为包含潜在 volatile 的变量之间的区别选择器和 actionobj 上方法的实际名称。

@selector() 通过为始终计算为常量 SEL 结果的语言添加语法来解决此问题。

从历史上看,Objective-C 最初是作为 C 预处理器的直接扩展实现的。所有各种以 @... 为前缀的添加使得该实现变得更加容易,因为基本上任何以 @ 为前缀的都是 Objective-Cism。

关于objective-c - @selector 指令有什么用?为什么不简单地使用方法的名称呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com