`
icrwen
  • 浏览: 269508 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

[转载]转载 【IOS】Object-C 中的Selector 概念 (2012-01-10 16:37:55)

 
阅读更多

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

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);

@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学习教程PPT

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

    Object-C基础教程

    **Object-C基础教程** ...通过阅读提供的"Object-C" PDF教程,你将逐步了解并掌握这些概念,从而为开发iOS或macOS应用打下坚实基础。在实践中不断探索和学习,你将能更好地驾驭Object-C这一强大语言。

    Object-C demos

    9. **Storyboard & XIB**:iOS 开发中,开发者常使用 Storyboard 或者 XIB 文件来设计界面布局。"ObjCTest" 中可能有加载并使用这些文件的代码片段。 10. **Model-View-Controller (MVC)**:Objective-C 开发遵循 ...

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

    Objective-C由苹果公司在其操作系统macOS和iOS的开发中广泛使用,是这两个平台上应用程序开发的主要语言之一。它的设计旨在提供更好的性能和灵活性,同时保持面向对象编程的优点。 #### 二、Objective-C的基本语法 ...

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

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

    iOS-OC-获取WiFi信息

    在iOS开发中,Objective-C(OC)是一种常用的编程语言,用于构建原生的iOS应用程序。在标题"iOS-OC-获取WiFi信息"中,我们关注的是如何在iOS应用中获取设备当前连接的WiFi的相关信息。这通常是通过使用Apple提供的...

    Android-Ultra-Photo-Selector多图片选择器的使用.zip

    《Android-Ultra-Photo-Selector:打造高效多图片选择体验》 在移动应用开发中,尤其是在社交、分享类应用中,用户对图片选择功能的需求日益增强。为了满足这一需求,开发者们经常需要集成图片选择器组件。Android-...

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

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

    Laravel开发-laravel-lang-selector

    在本文中,我们将深入探讨Laravel开发中的一个重要组件——`laravel-lang-selector`,这是一个用于构建智能多语言网站的工具。Laravel是一个基于PHP的优雅、简洁且强大的Web开发框架,它提供了许多开箱即用的功能,...

    从C++到Object-C

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

    Object-C复习_object-c_复习_

    Objective-C(简称Obj-C)是一种基于C语言的、面向对象的编程语言,主要用于苹果的iOS和macOS操作系统开发。作为Apple的首选编程语言,理解并熟练掌握Objective-C对于iOS和macOS应用开发至关重要。本复习资料旨在...

    Object-C的语法与Cocoa框架

    Object-C是一种面向对象的编程语言,最初由Pike International开发,后被苹果公司采纳并成为Mac OS X和iOS应用开发的主要语言。Object-C是在C语言的基础上增加了面向对象的特性,其设计目标是为了提高程序的可维护性...

    robot-cases-selector-plugin.hpi

    robot-cases-selector-plugin插件,使用指南请查看另一篇博客

    postcss-prefix-selector:使用选择器为所有CSS规则添加前缀

    postcss前缀选择器 使用自定义命名空间.a =&gt; .prefix .a每个CSS选择器添加前缀。 目录 安装 $ npm install postcss-prefix-... exclude : [ '.c' ] , // Optional transform callback for case-by-case overrid

    GAppio:甘建平应用ios object-c版

    Object-C是苹果公司为Mac OS X和iOS操作系统设计的一种面向对象的编程语言,它是C语言的超集,增加了Smalltalk风格的消息传递机制。在“甘建平应用ios object-c版”中,开发者可能利用了Object-C的特性来构建用户...

    playwright-query-selector-all方法详解

    playwright-query-selector-all方法详解

    object-c 基础教程

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

    object-c程序设计

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

    react-use-context-selector:React的上下文选择器挂钩

    当前,React中没有使用钩子来订阅部分上下文的本地方法。 这意味着更改上下文的一小部分,可能会导致重新渲染使用上下文的每个组件。 出于相同的目的,还存在另一个包 ,但它不再允许您使用常规的Consumer ,并且它...

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

    **Object-C初学者中文教程** Objective-C是一种面向对象的编程语言,主要被Apple用于开发iOS和macOS的应用程序。作为初学者,理解Object-C的基本概念和技术是迈向iPhone开发的第一步。本教程旨在帮助你深入理解...

Global site tag (gtag.js) - Google Analytics