`

Object-C中的Selector概念

    博客分类:
  • iOS
 
阅读更多
selector可以叫做选择器,其实指的就是对象的方法,也可以理解为C语言里面的函数指针,在面向对象里面的对应概念。

@selector(xxxx)的作用是找到名字为xxxx的方法。一般用于[a performSelector:@selector(b)];就是说去调用a对象的b方法,和[a b];的意思一样,但是这样更加动态一些。@selector(xxxx)返回的类型是SEL,看方法说明的时候如果参数类型是SEL,那么就是要接受@selector(xxxx)返回的值的那种了。
 
 
在Objc中 SEL的定义是:
  1. 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基础教程** ...通过阅读提供的"Object-C" PDF教程,你将逐步了解并掌握这些概念,从而为开发iOS或macOS应用打下坚实基础。在实践中不断探索和学习,你将能更好地驾驭Object-C这一强大语言。

    EventBusObject-CVersion(EventBus的Object-C语言版本).zip

    下面我们将深入探讨EventBus的基本概念、Object-C版本的特点以及如何在iOS应用中使用它。 **EventBus基本概念:** EventBus 是一种设计模式,灵感来源于发布/订阅模式,用于简化应用程序内部组件之间的通信。它通过...

    Object-C demos

    在这个项目中,"ObjCTest" 可能是一个包含多个源代码文件的目录,这些文件涵盖了 Objective-C 的各种概念和技术,如类、对象、继承、封装、多态性以及方法调用等。 1. **类与对象**:Objective-C 中的一切皆为对象...

    Object-C语言,用C语言实现面向对象

    Object-C,全称Objective-C,是一种基于C语言的、面向对象的编程语言,由Stepanov和Moss在1983年为NextStep操作系统开发。苹果公司广泛使用Objective-C作为其iOS和macOS操作系统以及相关框架如Foundation和AppKit的...

    Object-C语言教程-提供了 Objective-C 的基本语法和一些示例,希望能够帮助你快速入门 Objective-C

    Objective-C的核心概念之一就是类和对象。类定义了对象的属性和行为。在Objective-C中,类的定义通常包括两个部分:接口(interface)和实现(implementation)。 - **接口**: 描述类的公共接口,包括属性和方法的声明...

    object-c学习教程PPT

    Objective-C(Object-C)是苹果公司开发的一种面向对象的编程语言,主要应用于iOS和Mac OS X操作系统。它是C语言的超集,包含了Smalltalk风格的消息传递机制,因此它具有C语言的底层控制能力和Smalltalk的灵活性。在...

    Object-C复习_object-c_复习_

    - **Selector**:选择器是Objective-C中表示方法的标识符,用于消息发送。 - **Dynamic Dispatch**:动态调度使得可以在运行时决定执行哪个方法。 - **Method Swizzling**:方法交换是一种运行时技术,可修改方法的...

    object-c 基础教程

    例如,`[anObject performSelector:@selector(aMethod)]`。 4. **@interface 和 @implementation**: `@interface` 用于声明类,包含属性(properties)和方法(methods)。`@implementation` 部分实现接口中的声明...

    object-c程序设计

    本节将深入探讨Object-C的核心概念、语法特点以及在实际应用中的使用技巧。 一、基础概念 1. 类(Class):在Object-C中,类是对象的蓝图,定义了一组属性(实例变量)和方法(消息)。每个对象都是某个类的实例。...

    object-c基础教程

    Object-C,全称Objective-C,是一种基于C语言的面向对象编程语言,主要用于Apple的iOS和macOS平台上的应用开发。它是Apple的Foundation和AppKit框架的基础,是开发iPhone、iPad以及Mac应用程序的核心语言。本教程将...

    object-c初学者中文教程 附源码 iPhone开发必读

    作为初学者,理解Object-C的基本概念和技术是迈向iPhone开发的第一步。本教程旨在帮助你深入理解Object-C的核心概念,并提供源码以供实践。 **一、Objective-C基础** 1. **消息传递机制**:Objective-C中的对象...

    从C++到Object-C

    从C++到Object-C的知识点涵盖了面向对象编程语言的迁移与适应,特别是对于那些有C++背景的程序员来说,理解Objective-C语言的特点、语法和编程范式是至关重要的。接下来将详细阐述这些知识点: 1. Objective-C语言...

    Object-C pdf

    Objective-C使用点语法`.`来发送消息,如`[object method]`。这种语法使得代码更易读,但也体现了Obj-C的动态性。消息可以动态解析,使得运行时可以决定执行哪个方法。 **4. 继承与多态** Objective-C支持单一继承...

    Object-C基础学习

    Objective-C(Object-C)是Apple开发的一种面向对象的编程语言,它是C语言的超集,主要用于iOS和Mac OS X操作系统上的应用开发。由于其在Apple生态系统中的重要地位,学习Objective-C成为了想要深入iOS开发的...

    从C++到Object-c

    Objective-C允许在代码中混合使用C语言的结构和面向对象的特性。这意味着可以在Objective-C程序中直接使用C的库和函数,这为开发提供了极大的灵活性。 #### 3.4 新类型与值 Objective-C引入了新的数据类型和值,...

    深入浅出Object-C之消息[汇编].pdf

    在深入探讨Object-C的消息机制之前,首先我们要理解的是,Objective-C是一种基于Smalltalk的动态面向对象编程语言,它是在C语言的基础上添加了面向对象的概念。与C++或Java等静态类型语言不同,Objective-C的方法...

    Object-C资源.docx

    - **与C兼容**:由于它是C语言的扩展,因此可以直接在Objective-C程序中混合使用C代码。 - **动态消息传递**:Objective-C采用动态消息传递机制,这意味着当一个方法被调用时,实际上是向对象发送一条消息。 - **...

    Object-c开发的练习上手项目

    这个语言是C语言的超集,因此它保留了C的语法结构,同时引入了类和消息传递等面向对象的特性。Objective-C的类定义使用@interface关键字,实例变量用@property声明,方法用-(返回类型)方法名:(参数类型)参数名形式...

    这是一个基于Objective-C语言的基础案例集。旨在用于给初学者快速了解Objective-C语言的语法。.zip

    例如,`[anObject performSelector:@selector(aMethod)]`就是在向`anObject`发送`aMethod`的消息。 4. **协议(Protocols)**:Objective-C的协议类似于Java和C#的接口,定义了一组方法签名,但不提供具体实现。...

Global site tag (gtag.js) - Google Analytics