`
啸笑天
  • 浏览: 3475467 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

Objective-c selector学习

 
阅读更多

 

学习Objective-C,为了巩固知识,翻译如下,有不妥之处,敬请指点。

在Objective C中,selector有两个含义。
1. 当在源代码中发消息给对象的时候,selector指的是方法名
2. 当源代码被编译后,指的是替代方法名的唯一标识符(identifier)

编译后的selector的类型是SEL, 所有具有相同方法名的方法有相同的selector
你可以用selector来调用一个object的方法----->这个为Cocoa中target-action的设计模式提供了基础

method and selector
从效率上说,编译后的代码中,ASCII的名字不会被用做方法的selector,编译器会把方法名写到一张表格里,用一个唯一的标识符(identifier)与它对应
并且在运行时用这个标识符来表示方法。标识符是唯一的,selector也是唯一的,没有两个相同的标识符或者selector。


SEL and @selector
为了区别于其他的数据类型,编译后的selector的类型为SEL。 指令@selector可以引用编译后的selector,这个要比使用方法名要有效率。

Methods and selectors
编译后的方法指示方法名,而不是方法的实现。这是多态和动态绑定的基础。这能让你发送相同的消息给不同的类的接收器,如果类方法名和对象方法名一样,
那么他们的selector标识符也是一样的,但是这不会冲突,首先selecotr标示符不是方法的实现,只代表方法名,其次类方法名和对象方法名属于不同的域。

Method Return and Parameter Types

 消息程序只能通过selector来访问方法的实现,所以对待所有具有相同selector的方法都是一样的。消息程序通过selector来获取返回类型和参数的类型
因此动态绑定需要所有具有相同名字的方法的实现有相同的return类型和相同的参数类型。

Varying the Message at Runtime

performSelector: 
performSelector:withObject:
performSelector:withObject:withObject: 
以上3个定义在NSObject protocol里的方法,把SEL标识符作为他们的初始参数。3个方法都直接映射到消息函数,举个例子,

[friend performSelector:@selector(gossipAbout:)withObject:aNeighbor];
相当于
[friend gossipAbout:aNeighbor];

有了这些方法,消息和接收对象在运行时是可变的。变量名可以用在消息表达式里,例:
id helper = getTheReceiver();
SEL request = getTheSelector();
[helper performSelector:request];

The Target-Action Design Pattern


在处理用户界面控制时,Appkit对于可变消息和可变接收对象运用的很好。例:
[myButtonCell setAction:@selector(reapTheWind:)];
[myButtonCell setTarget:anObject];

几个方法:
1. SEL val = @selector(method);
2. SEL val = NSSelectorFromString(methodString)
3. NSString *methodString = NSStringFromSelector(sel_val)

分享到:
评论

相关推荐

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

    1. **Objective-C的起源与特性**:Objective-C是在C语言的基础上扩展的,增加了消息传递机制和面向对象特性。它的语法包含C语言的所有部分,同时引入了类、继承、多态等OOP概念。 2. **类与对象**:在Objective-C中...

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

    ### Objective-C语言教程知识点...通过本教程的学习,你将能够掌握Objective-C的基本语法,并具备构建macOS和iOS应用程序的能力。Objective-C的应用范围广泛,不仅适用于桌面应用开发,更是iOS应用开发的首选语言之一。

    objective-c学习资料

    Objective-C是在C语言基础上扩展的,它引入了消息传递机制和类的概念,使得C语言具备了面向对象的能力。Objective-C的语法在某些方面与C++相似,但它的动态性更强,允许在运行时修改类和方法。 2. **类与对象**: ...

    objective-c编程 第2版=objective-c program 2nd edition_13889311

    1. **基础语法**:学习Objective-C首先需要了解它的基本语法,包括变量定义、数据类型、运算符、流程控制语句等。此外,还会涉及Objective-C中的特殊语法,如nil和NULL的区别、实例变量和属性的使用。 2. **类与...

    Objective-C基础教程源代码 Learn objective-C on the Mac Mark Dalrymple著书

    1. **Objective-C语法**:Objective-C的语法基于C语言,但引入了类、接口和消息传递等概念。这包括定义类、属性(@property)和方法(@selector)的语法,以及理解类接口(.h)和实现(.m)文件的作用。 2. **对象...

    Objective-C编程之道

    Objective-C是一种强大的面向对象的编程语言,主要用于Apple的Mac OS X和iOS操作系统。它在C语言的基础上添加了Smalltalk...通过学习本书,开发者可以全面掌握Objective-C语言,并具备开发高质量iOS和Mac应用的能力。

    0基础iOS开发学习计划Objective-c语言内容概述.doc

    ### 0基础iOS开发学习计划Objective-c语言内容概述 #### Objective-C简介 Objective-C是一种结合了C语言特性和面向对象编程思想的语言,它是苹果iOS和macOS应用开发的基础语言之一。Objective-C诞生于20世纪80年代...

    objective-c 面向对象编程

    Objective-C通过方法选择器(selector)实现多态,同一个消息可以被不同的对象以不同方式处理。 5. 消息传递:Objective-C的核心是消息传递机制。当你调用一个对象的方法时,实际上是向该对象发送一条消息。对象...

    Objective-C函数速查实例手册光盘 源文件

    - **类与对象**:Objective-C基于C语言,引入了类和对象的概念,支持面向对象编程。 - **协议(Protocol)**:Objective-C的协议类似于Java和C#的接口,定义了一组方法签名,可被多个类实现。 - **分类(Category...

    基于Objective-C的面向对象编程

    Objective-C是苹果公司开发的一种面向对象的编程语言,它是C语言的超集,增加了Smalltalk风格的消息传递机制。Objective-C在iOS和macOS开发中扮演着核心角色,是构建Apple生态系统应用的主要语言。 在"基于...

    Objective-C再学习demo1

    "Objective-C再学习demo1"是一个项目,旨在复习和巩固Objective-C的基础知识和基本数据类型。这个压缩包可能包含了用于演示这些概念的源代码文件,命名为"Objective-C_Basic"。 在Objective-C中,基础数据类型主要...

    Learn Objective-C(zh)(v2).pdf

    接下来,书中会讲解Objective-C的语法,如选择器(selector)、协议(protocol)、分类(category)和扩展(extension)。选择器是Objective-C中表示方法的唯一标识符,用于消息的发送。协议定义了一组可选的方法,...

    objective-c的一些代码

    学习Objective-C的同时,开发者还需要了解Xcode集成开发环境(IDE)的使用,以及Apple的开发工具如Interface Builder来设计用户界面。此外,理解Model-View-Controller (MVC)设计模式对于构建iOS应用至关重要,它将...

    Effective Objective-C 2.0&Obj;-C高级编程

    "Effective Objective-C 2.0&Obj-C高级编程"这个压缩包文件包含了关于这个语言的深入学习资料,旨在帮助开发者提升他们的编程技能和理解。下面我们将详细探讨其中涉及的一些关键知识点。 1. **内存管理**: - ...

    IOS应用源码——Objective-C基础教程 随书源码.zip

    Objective-C是苹果公司为其操作系统macOS和iOS开发的主要编程语言,它是C语言的超集,融合了Smalltalk的面向对象特性。本教程的随书源码着重于介绍Objective-C的基础知识,帮助开发者深入理解该语言的语法和特性,...

    禅与 Objective-C 编程艺术

    《禅与 Objective-C 编程艺术》是一本深入探讨Objective-C编程哲学和技术的书籍,旨在帮助开发者提升代码质量,写出更具艺术性的程序。Objective-C,作为苹果生态系统的主要编程语言,是开发iOS和macOS应用程序的...

    Objective-C2.0程序设计 答案

    Objective-C是一种面向对象的编程语言,它是C语言的超集,主要用于Apple的Mac OS X和iOS操作系统。在Objective-C2.0中,苹果引入了一些改进和优化,使其更易用且效率更高。以下是对Objective-C2.0程序设计中一些关键...

    Programming in Objective-C 5th Edition

    ### Objective-C基础知识详解 #### 一、Objective-C简介 ...通过学习《Programming in Objective-C》这本书,读者可以系统地掌握Objective-C语言的基础知识,为进一步学习iOS和macOS应用开发打下坚实的基础。

    objective-c委托机制(二)(delegate2)

    Objective-C的委托(Delegate)机制是面向对象编程中一种重要的设计模式,它允许一个对象(委托方)将某些任务或事件处理权交由另一个对象(被委托方)来执行。在Objective-C中,委托通常用于实现组件之间的通信,如...

    Objective-C学习资料

    Objective-C是在C语言的基础上扩展的,它引入了Smalltalk的面向对象特性,如类、消息传递和协议。Objective-C的语法中,类定义以`@interface`和`@implementation`关键字开始和结束,属性和方法通过`@property`和`@...

Global site tag (gtag.js) - Google Analytics