Rai*_*bal 8 objective-c selector
我读了很多文章来理解为什么有必要使用它@selector()来引用一个方法,但我不认为我很满意.例如,当我们为按钮指定动作时,我们必须写:
[btn addTarget:self action:@selector(myMethod)];
Run Code Online (Sandbox Code Playgroud)
为什么不简单:
[btn addTarget:self action:myMethod];
Run Code Online (Sandbox Code Playgroud)
请解释需要和理由,没有它会发生什么.
我已经阅读了很多文章以了解@selector关键字,但我还是不太明白它的用途.我只想问为什么我们有@selector.
这一切都与解析C语言有关.
就其本身而言,在一个表达式中[obj performSelector:someRandomSelector]',编译器将someRandomSelector位视为"展开无论someRandomSelector是什么- 评估表达式,处理#defines,为后面的链接设置符号等等...... - 无论扩展产生什么,最好是SEL .
因此,如果您要编写[obj performSelector:action]',编译器将无法知道action作为包含潜在易失性选择器的变量与action作为方法的实际名称之间的区别obj.
@selector() 通过创建总是求值为常量SEL结果的语言的语法添加来解决这个问题.
从历史上看,Objective-C最初是作为C预处理器的直接扩展实现的.所有各种@...前缀添加使得实现更加容易,因为基本上以a @为前缀的任何东西都是Objective-Cism.
| 归档时间: |
|
| 查看次数: |
1490 次 |
| 最近记录: |