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:);
6.
7.
-(
void
)methodWIthTwoArguments:(id)argumentOne and:(id)argumentTwo;
8.
SEL twoArgumentSelector = @selector(methodWithTwoArguments:and:);
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.
06.
if
( timerShouldEnd ) {
07.
[timer invalidate];
08.
}
09.
}
10.
11.
@end
12.
13.
14.
15.
int
main(
int
argc,
const
char
**argv)
16.
{
17.
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.
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.
3.
4.
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
分享到:
相关推荐
**Objective-C**是一种结合了C语言的基础特性和Smalltalk式消息传递机制的面向对象编程语言。作为C语言的一个超集,Objective-C允许开发者直接使用C语言代码。此外,它还借鉴了C++的一些特性,尽管它并非C++的直接...
1. **Objective-C的起源与特性**:Objective-C是在C语言的基础上扩展的,增加了消息传递机制和面向对象特性。它的语法包含C语言的所有部分,同时引入了类、继承、多态等OOP概念。 2. **类与对象**:在Objective-C中...
Objective-C编程第二版,可能是为了适应技术的更新和开发者的需求而进行的一次修订,旨在帮助程序员深入理解和熟练掌握Objective-C语言。 Objective-C是C语言的超集,它在C的基础上添加了面向对象的概念,如类、...
1. **Objective-C语法**:Objective-C的语法基于C语言,但引入了类、接口和消息传递等概念。这包括定义类、属性(@property)和方法(@selector)的语法,以及理解类接口(.h)和实现(.m)文件的作用。 2. **对象...
总的来说,Objective-C语言的核心语法包括类的定义和消息传递机制,内存管理和对象生命周期管理,以及类型系统特别是`id`、`Class`和`SEL`的使用。这些知识点对于从C++转战Objective-C的开发者来说至关重要,理解并...
在Objective-C中,类通过@interface和@implementation来定义,属性通过@property声明,方法通过-(return_type)selector:(参数类型)parameters;定义。 其次,Objective-C中的消息传递是其核心特性。与其他语言不同,...
Objective-C是一种结合了C语言特性和面向对象编程思想的语言,它是苹果iOS和macOS应用开发的基础语言之一。Objective-C诞生于20世纪80年代,由Brace N. Koch等人设计并发展起来。随着iOS和macOS系统的流行,...
Objective-C通过方法选择器(selector)实现多态,同一个消息可以被不同的对象以不同方式处理。 5. 消息传递:Objective-C的核心是消息传递机制。当你调用一个对象的方法时,实际上是向该对象发送一条消息。对象...
5. **方法定义**:Objective-C的方法定义可能包括选择器(selector)、参数列表和方法体。比如,`- (FractionDemo *)add:(FractionDemo *)otherFraction`是一个加法操作的方法。 6. **协议(Protocol)**:...
Objective-C是苹果公司开发的一种面向对象的编程语言,它是C语言的超集,增加了Smalltalk风格的消息传递机制。Objective-C在iOS和macOS开发中扮演着核心角色,是构建Apple生态系统应用的主要语言。 在"基于...
- **类与对象**:Objective-C基于C语言,引入了类和对象的概念,支持面向对象编程。 - **协议(Protocol)**:Objective-C的协议类似于Java和C#的接口,定义了一组方法签名,可被多个类实现。 - **分类(Category...
Objective-C是在C语言基础上扩展的,它引入了消息传递机制和类的概念,使得C语言具备了面向对象的能力。Objective-C的语法在某些方面与C++相似,但它的动态性更强,允许在运行时修改类和方法。 2. **类与对象**: ...
### Objective-C基础知识详解 #### 一、Objective-C简介 ...通过学习《Programming in Objective-C》这本书,读者可以系统地掌握Objective-C语言的基础知识,为进一步学习iOS和macOS应用开发打下坚实的基础。
首先,Objective-C是C语言的超集,它引入了Smalltalk的面向对象特性,如消息传递、类、继承、多态性和协议。这些概念在代码实践中至关重要。 1. **消息传递**:Objective-C中的对象通过发送消息来进行通信。例如,`...
接下来,书中会讲解Objective-C的语法,如选择器(selector)、协议(protocol)、分类(category)和扩展(extension)。选择器是Objective-C中表示方法的唯一标识符,用于消息的发送。协议定义了一组可选的方法,...
Objective-C是一种强大的面向对象的编程语言,特别是在iOS和macOS应用开发中占据核心地位。"Effective Objective-C 2.0&Obj-C高级编程"这个压缩包文件包含了关于这个语言的深入学习资料,旨在帮助开发者提升他们的...
Objective-C是苹果公司为其操作系统macOS和iOS开发的主要编程语言,它是C语言的超集,融合了Smalltalk的面向对象特性。本教程的随书源码着重于介绍Objective-C的基础知识,帮助开发者深入理解该语言的语法和特性,...
Objective-C是一种面向对象的编程语言,它是C语言的超集,主要用于Apple的Mac OS X和iOS操作系统。在Objective-C2.0中,苹果引入了一些改进和优化,使其更易用且效率更高。以下是对Objective-C2.0程序设计中一些关键...
《禅与 Objective-C 编程艺术》是一本深入探讨Objective-C编程哲学和技术的书籍,旨在帮助开发者提升代码质量,写出更具艺术性的程序。Objective-C,作为苹果生态系统的主要编程语言,是开发iOS和macOS应用程序的...
Objective-C是一种强大的面向对象的编程语言,主要用于Apple的Mac OS X和iOS操作系统。它基于C语言,添加了Smalltalk的类、消息传递等面向对象特性。在这个“Objective-C程序设计+代码”主题中,我们将深入探讨这个...