`

【Objective-C】selector in Objective-C

 
阅读更多

selector在Objective-C裡面,通常被拿來當作callback function使用。以下是網路上看來的,先記起來,以免日後要找時忘記。

SEL is a type that represents a selector in Objective-C. The @selector() keyword returns a SEL that you describe. It’s not a function pointer and you can’t pass it any objects or references of any kind. For each variable in the selector (method), you have to represent that in the call to @selector. For example:

1.-(void)methodWithNoArguments;
2.SEL noArgumentSelector = @selector(methodWithNoArguments);
3. 
4.-(void)methodWithOneArgument:(id)argument;
5.SEL oneArgumentSelector = @selector(methodWithOneArgument:); // notice the colon here
6. 
7.-(void)methodWIthTwoArguments:(id)argumentOne and:(id)argumentTwo;
8.SEL twoArgumentSelector = @selector(methodWithTwoArguments:and:); // notice the argument names are omitted

Selectors are generally passed to delegate methods and to callbacks to specify which method should be called on a specific object during a callback. For instance, when you create a timer, the callback method is specifically defined as:

1.-(void)someMethod:(NSTimer*)timer;

So when you schedule the timer you would use @selector to specify which method on your object will actually be responsible for the callback:

01.@implementation MyObject
02. 
03.-(void)myTimerCallback:(NSTimer*)timer
04.{
05.// do some computations
06.if( timerShouldEnd ) {
07.[timer invalidate];
08.}
09.}
10. 
11.@end
12. 
13.// ...
14. 
15.int main(int argc, const char **argv)
16.{
17.// do setup stuff
18.MyObject* obj = [[MyObject alloc] init];
19.SEL mySelector = @selector(myTimerCallback:);
20.[NSTimer scheduleTimerWithTimeInterval:30.0 target:obj selector:mySelector userInfo:nil repeats:YES];
21.// do some tear-down
22.return 0;
23.}

In this case you are specifying that the object obj be messaged with myTimerCallback every 30 seconds.

假如一個function在該做的事完成後要執行selector callback,可以類似下面這樣寫

1.-(void) someMethod:(id)handler selector:(SEL)selector {
2.// some codes here...
3. 
4.// execute callback function
5.if( handler != nil && selector != nil && [handler respondsToSelector:selector] ) {
6.[handler performSelector:selector];
7.}
8.}

Reference:
http://stackoverflow.com/questions/297680/how-do-sel-and-selector-work-in-iphone-sdk

分享到:
评论

相关推荐

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

    **Objective-C**是一种结合了C语言的基础特性和Smalltalk式消息传递机制的面向对象编程语言。作为C语言的一个超集,Objective-C允许开发者直接使用C语言代码。此外,它还借鉴了C++的一些特性,尽管它并非C++的直接...

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

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

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

    Objective-C编程第二版,可能是为了适应技术的更新和开发者的需求而进行的一次修订,旨在帮助程序员深入理解和熟练掌握Objective-C语言。 Objective-C是C语言的超集,它在C的基础上添加了面向对象的概念,如类、...

    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语言的核心语法包括类的定义和消息传递机制,内存管理和对象生命周期管理,以及类型系统特别是`id`、`Class`和`SEL`的使用。这些知识点对于从C++转战Objective-C的开发者来说至关重要,理解并...

    Objective-C编程之道

    在Objective-C中,类通过@interface和@implementation来定义,属性通过@property声明,方法通过-(return_type)selector:(参数类型)parameters;定义。 其次,Objective-C中的消息传递是其核心特性。与其他语言不同,...

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

    Objective-C是一种结合了C语言特性和面向对象编程思想的语言,它是苹果iOS和macOS应用开发的基础语言之一。Objective-C诞生于20世纪80年代,由Brace N. Koch等人设计并发展起来。随着iOS和macOS系统的流行,...

    objective-c 面向对象编程

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

    Objective-C示例代码1

    5. **方法定义**:Objective-C的方法定义可能包括选择器(selector)、参数列表和方法体。比如,`- (FractionDemo *)add:(FractionDemo *)otherFraction`是一个加法操作的方法。 6. **协议(Protocol)**:...

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

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

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

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

    objective-c学习资料

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

    Programming in Objective-C 5th Edition

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

    objective-c的一些代码

    首先,Objective-C是C语言的超集,它引入了Smalltalk的面向对象特性,如消息传递、类、继承、多态性和协议。这些概念在代码实践中至关重要。 1. **消息传递**:Objective-C中的对象通过发送消息来进行通信。例如,`...

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

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

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

    Objective-C是一种强大的面向对象的编程语言,特别是在iOS和macOS应用开发中占据核心地位。"Effective Objective-C 2.0&Obj-C高级编程"这个压缩包文件包含了关于这个语言的深入学习资料,旨在帮助开发者提升他们的...

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

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

    Objective-C2.0程序设计 答案

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

    禅与 Objective-C 编程艺术

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

    objective-c 程序设计 + 代码

    Objective-C是一种强大的面向对象的编程语言,主要用于Apple的Mac OS X和iOS操作系统。它基于C语言,添加了Smalltalk的类、消息传递等面向对象特性。在这个“Objective-C程序设计+代码”主题中,我们将深入探讨这个...

Global site tag (gtag.js) - Google Analytics