zoukankan      html  css  js  c++  java
  • SEL数据类型,@selector的用法,以及调用SEL

    1.SEL数据类型

    SEL是个指针类型的数据,类似C语言中的函数指针。在OC中,每个对象方法都有其对应着一个SEL变量。当我们调用对象方法时,编译器会将该方法转换成一个SEL的数据,然后去类中寻找该方法对于的SEL。(这里涉及的深层原理本文没有深究,本文仅仅将SEL以及@selector的使用)

    2.@selector的用法

    @selector(方法名),该函数返回一个SEL类型的数据,因此可以这样使用。假设Person类中有一对象方法叫做run()。而我们可以这样调用它:

    1 SEL f1 = @selector(run);
    2 
    3 Person* Tom = [[Person alloc] init];
    4 
    5 [Tom performSelector:f1]; // 调用run方法

    3.调用SEL

    每个方法都有自己的一个SEL变量成_cmd,在方法内部调用它,可以打印出该方法名。具体方法如下:

    - (void)test
    {
        NSLog("%@", NSStringFromSelector:_cmd); // 打印出:test    
    }

    原理是调用NSStringFromSelector将_cmd转换成字符串再打印。同时performSelector还有传入参数的版本,具体请参考Xcode中的OC文档。

    总结:SEL就是一个数据类型,调用@selector()可以将任何数据转换成SEL数据,同时调用performSelector系列的对象方法可以调用SEL对应的方法。

  • 相关阅读:
    Jmeter -- HTTP Request Defaults
    Jmeter -- 属性和变量
    Jmeter -- 逻辑控制器(Logic Controller)
    Jmeter报告优化之New XSL stylesheet
    Jmeter调试工具---HTTP Mirror Server
    Jmeter ----Bean shell使用
    转jmeter --JDBC请求
    Memcached 教程
    基于ZooKeeper的分布式Session实现
    Kafka配置说明
  • 原文地址:https://www.cnblogs.com/loversinJapan/p/5103625.html
Copyright © 2011-2022 走看看