1.SEL数据类型

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

2.@selector的用法

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

 SEL f1 = @selector(run);

 Person* Tom = [[Person alloc] init];

 [Tom performSelector:f1]; // 调用run方法

3.调用SEL

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

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

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

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

SEL数据类型,@selector的用法,以及调用SEL的更多相关文章

  1. SEL数据类型

    // //  main.m //  06-SEL数据类型 // //  Created by apple on 14-3-18. //  Copyright (c) 2014年 apple. All ...

  2. 小白学开发(iOS)OC_ SEL数据类型(2015-08-10)

    // //  main.m //  SEL数据类型 // //  Created by admin on 15/8/12. //  Copyright (c) 2015年 admin. All rig ...

  3. Objective C SEl 和@selector是怎么工作的||How do SEL and @selector work in iphone sdk?

    SEL is a type that represents a selector in Objective-C. The @selector() keyword returns a SEL that ...

  4. [Objective-c 基础 - 2.11] SEL数据类型

    A.概念 1.SEL类型代表方法 2.每个方法都有一个对应的SEL类型的数据 3.实例对象调用方法 (1)编译器会把类的方法包装成SEL类型的数据, (2)根据SEL数据找到方法地址,缓存此地址 (3 ...

  5. Selector API用法

    java.nio.channels 类 Selector java.lang.Object java.nio.channels.Selector 直接已知子类: AbstractSelector pu ...

  6. Android中Selector的用法(改变ListView和Button的默认背景)

    Android中的Selector的用法 http://blog.csdn.net/shakespeare001/article/details/7788400#comments Android中的S ...

  7. Android菜鸟成长记9 -- selector的用法

    在项目开发的时候,由于系统给出的控件不够美观,因此开发时领导常常要我更改下界面,用美工给的图片取代系统图片.开始时,我只是给按钮等设置一下背景图片,这样做虽然美观了,但界面看起来却比较死板,比如用户点 ...

  8. selector 的用法,在选择和不选择情况下的颜色

    在res/drawable文件夹新增一个文件,此文件设置了图片的触发状态,你可以设置 state_pressed,state_checked,state_pressed,state_selected, ...

  9. python数据类型之int用法

    1.查看整型的用法 CODE:print(dir(int))['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', ...

随机推荐

  1. Zipper

      Zipper Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  2. CXF发布webservice入门

    1.设置CXF的bin目录进环境变量 2.CXF导入相关的jar包. 3.建立接口 @WebService public interface HelloWorld { public void say( ...

  3. JS正则表达式大全【转】

    正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个 ...

  4. PHP-xml-1

    SimpleXML 解析xml 假设xml没有声明encoding默认使用utf-8进行解码.终于得到的数据编码为utf-8格式. 我猜想它内部实现了iconv(encoding='utf-8', ' ...

  5. iOS 动态加入button

    按现有的button之后自己主动创造一个新的button,并为新button加入事件,因此,当您单击弹出提示框. 于viewcontroller.h添加 @property (weak, nonato ...

  6. Java Swing界面编程(27)---JRadioButton事件处理

    在单选button操作中.能够使用ItemListener接口进行事件的监听. package com.beyole.util; import java.awt.Container; import j ...

  7. 常用Java Web 服务器

    Java Web应用程序需要部署在Java web服务器中运行,常用的Java Web服务器有Tomcat.GlassFish.WebLogic.JBoss.WebSphere.Jetty.JRun等 ...

  8. MySql 环境配置

    关键词 MySQL 5.6.17  phpmyadmin   [下载MySQL]  MySQL Community Server MySQL社区版免费 注:需要oracle账户登录下载 [安装MySQ ...

  9. Android周笔记(9.8-14)(持续更新)

    本笔记记录一周内的小知识点和一些心学习的Demo. 1.PopupWindow: new 一个activity_pop_window:id为popwindow的Button,id为hello123的T ...

  10. Zabbix监控Linux主机设置

          说明: Zabbix监控服务端已经配置完成,现在要使用Zabbix对Linux主机进行监控. 具体操作: 以下操作在被监控的Linux主机进行,这里以CentOS 6.x系统为例. 一.配 ...