Objective-C中的SEL

Objective-C中的SEL,第1张

概述 SEL 在Objective-C中,SEL是选择器(selector)的一个类型。选择器就是指向方法的一个指针,读者可以简单理解为程序运行到这里就会执行指定的方法,可以这样定义一个选择器: SEL action = [button action];  我们这样使用一个选择器,下面的选择器都叫做action: [Foo action]   [  SEL

在Objective-C中,SEL是选择器(selector)的一个类型。选择器就是指向方法的一个指针,读者可以简单理解为程序运行到这里就会执行指定的方法,可以这样定义一个选择器:

  SEL action = [button action];   

我们这样使用一个选择器,下面的选择器都叫做action:

  [Foo action]      [bar action]   

在Target-Action 模式(Cocoa 程序中的一种常用模式)中:Target 指定了一个类,Action指定一个方法。在一个对象上设置Action就是通过选择器完成的:

  -(voID)setTarget:(ID)target;      -(voID)setAction:(SEL)action;   

下述语句设置了一个button对象上的Action为“@selector(start:)”,即它调用start方法:

  [button setAction:@selector(start:)];   

如果你的方法上有两个参数,比如:

  -(voID)setname:(Nsstring *)name age:(int)age;   

那么,你的选择器应该这样书写:

  SEL sel = @selector(setname:age:);   

如果方法不存在的话,调用该方法的应用可能会异常中止。所以,需要使用respondsToSelector 方法来判断该对象是否存在对应的方法,使用performSelector:withObject:方法来调用选择器:

  SEL sel = @selector (start:) ; // 指定action      if ([obj respondsToSelector:sel]) { //判断该对象是否有相应的方法      [obj performSelector:sel withObject:self]; //调用选择器方法        

下面来看一个应用选择器的实例。

【例2-16】选择器实例。

  #import <Foundation/Foundation.h>     @interface ClassA : NSObject {      }      - (voID) print;      @end      @implementation ClassA      - (voID) print{      NSLog (@"I'm ClassA.") ;      }      @end      int main (int argc, const char * argv[]) {      NSautoreleasePool * pool = [[NSautoreleasePool alloc] init];      SEL sel = @selector (print) ;      ClassA *classA = [[ClassA alloc]init];      [classA performSelector:sel withObject:nil]; //调用选择器指定的方法      [pool drain];      return 0;        

【程序结果】

  I'm ClassA.   

下面解释一下这段代码,读者有可能看不明白,因为到目前为止并没有讲述类相关的知识。读者只需要了解上述例子中选择器的用法即可,关于类的知识,会在后面的章节详细阐述。

代码首先创建了一个名字叫ClassA 的类,它只包含一个方法print。在随后的实现文件中,我们实现了这个方法:

  - (voID) print{      NSLog (@"I'm ClassA.") ;        

读者不难看出,这个方法仅仅是打印到控制台上一句话。在接下来的main方法中,定义了一个选择器sel,它指向的是一个名叫print 的方法。我们并不知道这个方法是哪个类的,因为具体的信息是在运行期间系统自动帮我们判断的。

  SEL sel = @selector (print) ;   

随后构建了一个对象(读者不用拘泥于语法,我们会在后面的章节详细阐述),并调用这个对象performSelector:withObject:的方法。

  ClassA *classA = [[ClassA alloc]init];      [classA performSelector:sel withObject:nil];   

这时候,系统就会自动调用classA对象的print方法,最终得到程序运行结果。

总结

以上是内存溢出为你收集整理的Objective-C中的SEL全部内容,希望文章能够帮你解决Objective-C中的SEL所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1057772.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存