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. java的静态代理

    解决这个问题:在多个模块要插入一段功能,比方,在不同业务处理模块中,都须要检查用户是否登录,假设不使用代理的话,每添加一个模块,就须要添加非常多代码. 比方,除了推断是否登录,假设还须要添加一个记录日 ...

  2. SerialPort

    using System;   using System.Collections.Generic;   using System.ComponentModel;   using System.Data ...

  3. DOM事件对象

    触发DOM上的事件时会产生一个事件对象event. event的内容:与事件有关的信息,导致事件的元素,事件的类型及其他与特定事件相关的信息. event对象会传入到事件处理程序中. 一.DOM 中的 ...

  4. 数据库基础(变量、运算符、if语句、while语句)

    数据库基础(变量.运算符.if语句.while语句)   变量: 定义变量:declare @变量名 数据类型 变量赋值:set @变量名 = 值 输出:print 变量或字符串 SQL语言也跟其他编 ...

  5. c# 读取IntPtr 中的数据

    c++的写法是这样的:LRESULT CPictureQueryDlg::OnQueryPicNty(WPARAM wp, LPARAM lp){EnableWindow(TRUE); BYTE *p ...

  6. C#.NET Split 的几种使用方法

    第一种方法: string s = "abcdeabcdeabcde"; string[] sArray = s.Split('c'); foreach (string i in ...

  7. Android Fragment真正意义上的onResume和onPause

    Fragment虽然有onResume和onPause的,但是这两个方法是Activity的方法,调用时机也是与Activity相同,和ViewPager搭配使用这个方法就很鸡肋了,根本不是你想要的效 ...

  8. Hibernate摘记

    原理: 1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.xml中的<mapping reso ...

  9. 重新关联bat文件的打开方式为系统默认方式

    为什么“BAT”扩展名的默认打开方式:显示出来的居然是“%1”这么一个怪异的东东,具体在什么位置的? c:\windowssystem32\command.com修复bat关联,打开command.c ...

  10. secedit

    secedit /export /cfg mytemplate.inf /log mylog.txt http://www.oracle-base.com/dba/script.php?categor ...