selector可以叫做选择器,其实指的就是对象的方法,也可以理解为C语言里面的函数指针,在面向对象里面的对应概念。
@selector(xxxx)的作用是找到名字为xxxx的方法。一般用于[a
performSelector:@selector(b)];就是说去调用a对象的b方法,和[a
b];的意思一样,但是这样更加动态一些。@selector(xxxx)返回的类型是SEL,看方法说明的时候如果参数类型是SEL,那么就是要接受@selector(xxxx)返回的值的那种了。
在Objc中 SEL的定义是:
- typedef struct objc_selector *SEL;
具体这objc_selector结构体是什么取决与使用GNU的还是Apple的运行时, 在Mac OS
X中SEL其实被映射为一个C字符串,可以看作是方法的名字,它并不一个指向具体方法实现(IMP类型才是)。对于所有的类,只要方法名是相同的,产生的selector都是一样的。
在iphone程序中会大量看到@selector这样的用法。<<iphone开发基础>花了很大一个篇幅来解析这个语法,但是不知是翻译问题,还是解释过细,不大看得懂,很是不给力.直到程序用这个语法,并且仔细看了一些解析文章。才明白这一语法。
简而言之,你可以理解
@selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取.
它的结果是一个SEL类型。这个类型本质是类方法的编号(函数地址)?因此我们有如下代码。
一.取得selector值.
C函数指针
int add(int val)
{
return val+1;
}
int (* c_func)(int val); //定义一个函数指针变量
c_func = add ; //把函数addr地址直接赋给c_func
object-c的选择器,
@interface foo
-(int)add:int val;
@end
SEL class_func ; //定义一个类方法指针
class_func = @selector(add:int);
注意1. @selector是查找当前类的方法,而[object @selector(方法名:方法参数..) ] ;是取object对应类的相庆方法.
注意2.查找类方法时,除了方法名,方法参数也查询条件之一.
注意3. 可以用字符串来找方法 SEL 变量名 = NSSelectorFromString(方法名字的字符串);
注意4. 可以运行中用SEL变量反向查出方法名字字符串
NSString *变量名 = NSStringFromSelector(SEL参数);
二.执行selector值.
取得相庆值后,怎么处理SEL值呢,这一点仍然与函数指针一样,就是执行它
函数指针执行,(以下有几种等效形式)
*c_func(10);
c_func(10);
SEL变量的执行.用performSelecor方法来执行.
[对象 performSelector:SEL变量 withObject:参数1 withObject:参数2];
三.selector的应用场合
selector本质是跟C的回调函数一样。主要用于两个对象之间进行松耦合的通讯.这种方法很多开发环境用到。比如GTK,Delphi.基本上整个Cocoa库之间对象,控制之间通讯都是在这个基础构建的。
分享到:
相关推荐
**Object-C基础教程** ...通过阅读提供的"Object-C" PDF教程,你将逐步了解并掌握这些概念,从而为开发iOS或macOS应用打下坚实基础。在实践中不断探索和学习,你将能更好地驾驭Object-C这一强大语言。
下面我们将深入探讨EventBus的基本概念、Object-C版本的特点以及如何在iOS应用中使用它。 **EventBus基本概念:** EventBus 是一种设计模式,灵感来源于发布/订阅模式,用于简化应用程序内部组件之间的通信。它通过...
在这个项目中,"ObjCTest" 可能是一个包含多个源代码文件的目录,这些文件涵盖了 Objective-C 的各种概念和技术,如类、对象、继承、封装、多态性以及方法调用等。 1. **类与对象**:Objective-C 中的一切皆为对象...
Object-C,全称Objective-C,是一种基于C语言的、面向对象的编程语言,由Stepanov和Moss在1983年为NextStep操作系统开发。苹果公司广泛使用Objective-C作为其iOS和macOS操作系统以及相关框架如Foundation和AppKit的...
Objective-C的核心概念之一就是类和对象。类定义了对象的属性和行为。在Objective-C中,类的定义通常包括两个部分:接口(interface)和实现(implementation)。 - **接口**: 描述类的公共接口,包括属性和方法的声明...
Objective-C(Object-C)是苹果公司开发的一种面向对象的编程语言,主要应用于iOS和Mac OS X操作系统。它是C语言的超集,包含了Smalltalk风格的消息传递机制,因此它具有C语言的底层控制能力和Smalltalk的灵活性。在...
- **Selector**:选择器是Objective-C中表示方法的标识符,用于消息发送。 - **Dynamic Dispatch**:动态调度使得可以在运行时决定执行哪个方法。 - **Method Swizzling**:方法交换是一种运行时技术,可修改方法的...
例如,`[anObject performSelector:@selector(aMethod)]`。 4. **@interface 和 @implementation**: `@interface` 用于声明类,包含属性(properties)和方法(methods)。`@implementation` 部分实现接口中的声明...
本节将深入探讨Object-C的核心概念、语法特点以及在实际应用中的使用技巧。 一、基础概念 1. 类(Class):在Object-C中,类是对象的蓝图,定义了一组属性(实例变量)和方法(消息)。每个对象都是某个类的实例。...
Object-C,全称Objective-C,是一种基于C语言的面向对象编程语言,主要用于Apple的iOS和macOS平台上的应用开发。它是Apple的Foundation和AppKit框架的基础,是开发iPhone、iPad以及Mac应用程序的核心语言。本教程将...
作为初学者,理解Object-C的基本概念和技术是迈向iPhone开发的第一步。本教程旨在帮助你深入理解Object-C的核心概念,并提供源码以供实践。 **一、Objective-C基础** 1. **消息传递机制**:Objective-C中的对象...
从C++到Object-C的知识点涵盖了面向对象编程语言的迁移与适应,特别是对于那些有C++背景的程序员来说,理解Objective-C语言的特点、语法和编程范式是至关重要的。接下来将详细阐述这些知识点: 1. Objective-C语言...
Objective-C使用点语法`.`来发送消息,如`[object method]`。这种语法使得代码更易读,但也体现了Obj-C的动态性。消息可以动态解析,使得运行时可以决定执行哪个方法。 **4. 继承与多态** Objective-C支持单一继承...
Objective-C(Object-C)是Apple开发的一种面向对象的编程语言,它是C语言的超集,主要用于iOS和Mac OS X操作系统上的应用开发。由于其在Apple生态系统中的重要地位,学习Objective-C成为了想要深入iOS开发的...
Objective-C允许在代码中混合使用C语言的结构和面向对象的特性。这意味着可以在Objective-C程序中直接使用C的库和函数,这为开发提供了极大的灵活性。 #### 3.4 新类型与值 Objective-C引入了新的数据类型和值,...
在深入探讨Object-C的消息机制之前,首先我们要理解的是,Objective-C是一种基于Smalltalk的动态面向对象编程语言,它是在C语言的基础上添加了面向对象的概念。与C++或Java等静态类型语言不同,Objective-C的方法...
- **与C兼容**:由于它是C语言的扩展,因此可以直接在Objective-C程序中混合使用C代码。 - **动态消息传递**:Objective-C采用动态消息传递机制,这意味着当一个方法被调用时,实际上是向对象发送一条消息。 - **...
这个语言是C语言的超集,因此它保留了C的语法结构,同时引入了类和消息传递等面向对象的特性。Objective-C的类定义使用@interface关键字,实例变量用@property声明,方法用-(返回类型)方法名:(参数类型)参数名形式...
例如,`[anObject performSelector:@selector(aMethod)]`就是在向`anObject`发送`aMethod`的消息。 4. **协议(Protocols)**:Objective-C的协议类似于Java和C#的接口,定义了一组方法签名,但不提供具体实现。...