文档章节

ios之SEL

feng_blog
 feng_blog
发布于 2015/08/31 15:36
字数 318
阅读 24
收藏 0

SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址。找到方法地址就可以调用方法, 其实消息就是SEL。对于下列方法调用:

[p test2];

主要有以下步骤:

1.把test2包装成SEL类型的数据

2.根据SEL数据找到对应的方法地址

3.根据方法地址调用对应的方法

比如一个类中有两个方法:+test和-test2每个方法在内存中的地址都有一个对应的SEL与之对应

SEL s1 == +test地址

SEL s2 == -test2地址

对象找要调用的方法时,isa指针会根据调用的方法名在类中找到相关的SEL对象(方法地址)去调用。所以,调用方法还可以用如下形式:

[pperformSelector:@selector(test2)];

performSelector:@selector(test2)返回的就是test2的方法地址。

如果方法还有参数,比如- (void)test3:(NSString *)abc,还可以按照如下格式调用:

[pperformSelector:@selector(test3:) [Object:@”abc”]];

对于上述调用方法,test3后一定要加”:“,因为”:”也是有参数方法的方法名的一部分。

版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

feng_blog

feng_blog

粉丝 120
博文 130
码字总数 105422
作品 3
朝阳
iOS工程师
私信 提问
OC中的消息传递-performselector的使用

1、OC中使用Selector来实现函数传递,大致有下面几个原因: (1)iOS中强调消息传递,而非函数调用; (2)iOS SDK中的大部分API都是selector的方式。 (3)你可以在任意时刻对一个对象传递消...

琪与千寻
2013/12/25
342
0
iOS逆向之旅(进阶篇) — HOOK(Method Swizzling)

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:656315826,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习...

_小迷糊
2018/10/26
0
0
iOS - 面向切面编程(AOP)

AOP: Aspect Oriented Programming 面向切面编程 一、什么是AOP 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 AOP是OOP的延续,函数式编程的一种衍生范型 二、AOP的优势...

AI考拉
09/03
38
0
(转载)Objective-C总Runtime的那点事儿(一)消息机制

原文地址:http://www.cocoachina.com/ios/20141018/9960.html 找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题。当然还有一些其他问题也几乎必问,...

小曼study
2017/03/15
0
0
OS X Mountain Lion 10.8.2 for WIN7 or WIN8 安装教程

本教程安装环境配置 CPU 英特尔 Intel(R) Pentium(R) Dual CPU E2200 @ 2.20GHz 主板 BIOSTAR - 英特尔 G31 (Bearlake) + ICH7 内存 金士顿 2G DDR2-SDRAM 800 MHz 单通道 显卡 nVIDIA GeFor......

Hackintosh
2013/01/11
7.4K
3

没有更多内容

加载失败,请刷新页面

加载更多

川普给埃尔多安和内堪尼亚胡的信

任性 https://twitter.com/netanyahu/status/1186647558401253377 https://edition.cnn.com/2019/10/16/politics/trump-erdogan-letter/index.htm...

Iridium
22分钟前
10
0
golang-mysql-原生

db.go package mainimport ("database/sql""time"_ "github.com/go-sql-driver/mysql")var (db *sql.DBdsn = "root:123456@tcp(127.0.0.1:3306)/test?charset=u......

李琼涛
50分钟前
5
0
编程作业20191021092341

1编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时 间。使用#define或const创建一个表示60的符号常量或const变量。通过while 循环让用户重复输入值,直到用户输入小于或等于0的值...

1李嘉焘1
51分钟前
7
0
Netty整合Protobuffer

现在我们都知道,rpc的三要素:IO模型,线程模型,然后就是数据交互模型,即我们说的序列化和反序列化,现在我们来看一下压缩比率最大的二进制序列化方式——Protobuffer,而且该方式是可以跨...

算法之名
56分钟前
19
0
如何用C++实现栈

栈的定义 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压...

BWH_Steven
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部