相对于c/c++对象语言,selector是obj-c中的一个特色类型,刚开始时我对她还不是很了解,因为最近在公司要做个iPhone的training,特地复习了一下语法,对selector有了更深的认识,“趁热”写下来,呵呵……
简单地理解,selector就是一个类型,这个类型的变量代表一个objectiv-c类的函数。如果比较一下它的背景,也许会有豁然开朗的感觉。
对C++来说,代码在编译前都必须明确所有函数调用的类型,什么样的对象能调用什么样的函数都在这个时候确定。在代码运行时,想要改变函数调用的形式是不可能的。而纯粹的对象语言看重程序应用的灵活性,在理想世界中,一个纯粹是由对象组成的世界,一切在运行时应该都是可以根据环境的变化而改变的,包括对对象方法的调用的形式(真是醍醐灌顶啊~~)。于是,selector概念的出现就不难理解了。通过它,在运行时我们可以动态地改变消息的接受者,也可以动态地改变消息类型(可以理解为动态改变调用的方法)。iPhone中的Target-Action设计模式就是最好的应用。
如此看来,selector在obj-c的动态性方面着实发挥了重要的作用。你认为呢?
分享到:
相关推荐
Objective-C语言中方法的传递有二种:①Selector ② Blocks,本文主要说一下Selector,关于Blocks会在后续总结一下。 消息传递模型(Message Passing)是Objective-C语言的核心机制。在Objective-C中,没有方法调用...
第 1 章,也就是本章 第 2 章,从 Hello,World!...第 5 章,Class 类型,选择器 Selector 以及函数指针 第 6 章,NSObject 的奥秘 第 7 章,对象的初始化以及实例变量的作用域 第 8 章,类方法以及私有方法
objective-c小技巧 1. 使用@property和@synthesize声明一个成员变量,给其赋值是时要在前面加上"self.",以便调用成员变量的setmember方法。 直接调用成员变量并且给其赋值:member=[NSString stringWithFormat...
Software engineering,programming language,operating system,iOS,OS,iPhone,iPad objective c,cocoa touch,SDK,object oriented design,Apple,Macintosh,tools,language,runtime,Xcode,objective-...
Objective-C iOS原生开发语言Objective-C。从0到1开始的demos。 5.8 对storyboard深入了解: 常见的报错: reason: '-[ViewController redBtn]: unrecognized selector sent to instance 0x7ff62ff05750' 多余的连线...
围绕Objective-C运行时的轻巧包装。lumos到底是什么? 如前所述,lumos是对objective-c运行时函数的轻量包装,可以更轻松地访问运行时。 它使Swift中的翻页和挂接等操作非常简单。 例如,假设您希望每当调用...
从 .net 框架切换到 Objective-C 时,我们错过的最重要的事情之一是中 Linq to Objects 扩展方法的集合。 当我们在上工作时,我们发现我们正在处理很多集合,就像我们曾经在 .net 中所做的那样。 在 Objective-C ...
注释是一种语法元数据的形式,可以添加到Objective-C源代码中,例如java注释。 0x01它能做什么? @when用于事件调度。 @When(AppLaunched,ViewController, @selector ( doLaunched: )) + ( void )doLaunched:( ...
Objective-C 的简单存根 NSObject <SBStub> *stub = [Stubbilino stubObject: [[ NSObject alloc ] init ]]; [stub stubMethod: @selector ( description ) withBlock: ^{ return @" Stubbilino is awesome! " ; }...
这个插件只支持 Objective-C。 ##特征 复制类名 复制表达式 复制为选择器或@selector()或NSSelectorFromString() 复制为objc_msgSend()片段 复制为符号断点表达式 复制为宏片段 支持属性 getter/setter 按住 ...
JNSwapIMP 是一个源代码包,它提供了一个快速简单的接口来侵入 Objective-C 运行时。 JNSwapIMP 允许您从继承自 NSObject 的任何对象中交换任何方法的实现,从而非常容易重新设计特定方法的功能或侵入密封类并重新...
一个满足您日常HTML需求的Objective-C框架。 快速概述 HTMLKit是符合的框架,用于解析和序列化iOS和OSXHTML文档和文档片段。 HTMLKit以与现代Web浏览器相同的方式解析实际HTML。 HTMLKit提供了丰富的DOM实现,用于...
@property (nonatomic) CGFloat maxProgress UI_APPEARANCE_SELECTOR; // Max value of progress @property (nonatomic) CGFloat minProgress UI_APPEARANCE_SELECTOR; // Min value of progress @property ...
BlockTracker BlockTracker可以跟踪方法的块参数。 它基于 。...__unused BTTracker *tracker = [ self bt_trackBlockArgOfSelector: @selector ( performBlock: ) callback: ^(BHInvocation * _Nonnull
前言 正在运行的 APP 突然 Crash,是一件令人不爽...Unrecognized Selector Crash KVO Crash Container Crash NSNotification Crash NSNull Crash NSTimer Crash 野指针 Crash 1 Unrecoginzed Selector Crash 出现原因
PLPatchMaster PLPatchMaster 提供了一个易于使用的基于块的 API,使用了提供的块蹦床库... [UIWindow pl_patchInstanceSelector: @selector(sendEvent:) withReplacementBlock: ^(PLPatchIMP *patch, UIEvent *event)
在Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现,达到给方法挂钩的目的。 每个类都有一个...
In this chapter, you'll use DTrace to hook objc_msgSend's entry probe and pull out the class name along with the Objective-C selector for that class. By the end of this chapter, you'll have LLDB ...
photo-selector-to-animation 照片选择器转场动画