c语言中int sel是什么意思,SEL的理解
为什么要用 SEL
主要是 API 要求的,其它情况另定
Summary
可以理解 @selector() 就是取类方法的编号,
它的行为基本可以等同 C语言 中的函数指针,
只不过 C 语言 中,可以把函数名直接赋给一个函数指针,
而 Object-C 的类不能直接应用函数指针,
这样只能做一个 @selector 语法来取.
每个 SEL 类型数据都是一个方法。
SEL 就是对方法的一种包装。
包装的 SEL 类型数据它对应相应的方法地址,
找到方法地址就可以调用方法。
在内存中每个类的方法都存储在类对象中,
每个方法都有一个与之对应的 SEL 类型的数据,
根据一个 SEL 数据就可以找到对应的方法地址,
进而调用方法。
Demo
#import "ViewController.h"
#define SuppressPerformSelectorLeakWarning(Stuff) \
do { \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
Stuff; \
_Pragma("clang diagnostic pop") \
} while (0)
@interface ViewController ()
@end
@interface Person : NSObject
- (void)test;
- (void)test:(NSString *)string;
@end
@implementation Person
- (void)test {
NSLog(@"___test___");
}
- (void)test:(NSString *)string {
NSLog(@"___test___%@", string);
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
Person *p = [Person new];
// 手动把 test 方法包装成 SEL 类型
SEL s1 = @selector(test);
SEL s2 = @selector(test:);
// 响应方法
SuppressPerformSelectorLeakWarning([p performSelector:s1]);
SuppressPerformSelectorLeakWarning([p performSelector:s2 withObject:@"参数"]);
SEL selector1 = NSSelectorFromString(@"test");
((void (*)(id, SEL))[p methodForSelector:selector1])(p, selector1);
}
@end
我的理解
Person *p = [Person new];
// 第一步,就是用 SEL 定义一个对象,这个对象用 @selector 的方式拥有了 p 的(test)方法
SEL s1 = @selector(test);
// 第二步,执行这个 s1 对象,就是执行这个方法
[p performSelector:s1]
【原创:iOS第九层】
c语言中int sel是什么意思,SEL的理解相关推荐
- int在c语言中的作用,C语言中int,Uint,uint16等有什么区别以及用处
C语言中int,Uint,uint16等有什么区别以及用处.在C中,既然有了int,为什么还要有uint?特别是uint16,uint32等又有什么用?他们有什么区别?" --------- ...
- c语言int作用,c语言中int的用法
C/C++编程语言中,int表示整型变量,是一种数据类型,下面学习啦小编就跟你们详细介绍下c语言中int的用法,希望对你们有用. c语言中int的用法:整型int C 语言提供了很多整数类型(整型), ...
- C语言中int、long等类型所占的字节数
C语言中int.long等类型所占的字节数.实验环境是win10,64位操作系统. #include<stdio.h> int main() {printf("sizeof(in ...
- c语言int作用,c语言中int的用法有哪些
c语言中int的用法有哪些 C/C++编程语言中,int表示整型变量,是一种数据类型,用于定义一个整型变量,在不同编译环境有不同的大小,不同编译运行环境大小不同下面小编给大家整理了c语言中int的用法 ...
- c语言中int作用,c语言中int的用法(5页)-原创力文档
第 第 PAGE 1 页 共 NUMPAGES 1 页 c语言中int的用法 C/C++编程语言中,int表示整型变量,是一种数据类型,下面小编就跟你们详细介绍下c语言中int的用法,希望对你们有用. ...
- c语言double类型是几字节,c语言中int long float double 等类型所占字节及输出表示(转)...
16位编译器 char :1个字节 char*(即指针变量): 2个字节 short int : 2个字节 int: 2个字节 unsigned int : 2个字节 float: 4个字节 doub ...
- c语言数据类型 占字节最少,C语言中int型是所占字节最短的数据类型。
C语言中int型是所占字节最短的数据类型. 更多相关问题 [单选,A1型题] 满而不痛者,此为痞,载于() [单选,A4型题,A3/A4型题] 钱某,男,16岁,近日因饮酒饱食后出现胃脘胀满疼痛,嗳腐 ...
- c语言中argc的作用,C语言中 int main(int argc,char *argv[])的两个参数详解
C语言中 int main(int argc,char *argv[])的两个参数详解 argc是命令行总的参数个数: argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数.命令行后面 ...
- c语言中a*=2*a 1,c语言中int a=2;a+=a*=a-=a*=3;printf("%d",a);怎么做?详细过程
题目: c语言中int a=2;a+=a*=a-=a*=3;printf("%d",a);怎么做?详细过程 解答: 首先a赋值为2: 然后计算a*=3,此时a为6: 然后计算a-= ...
- c语言int16位数据范围,c语言中int取值范围为16位指的是什么16位
1.c语言中int取值范围为16位指的是什么16位 计算机用二进制表示数值,最小单位就是位(bit),可以储存0或1,16位就是有16个储存0或1的位,其中左边第一位是符号位,0代表+ .1代表-. ...
最新文章
- 你知道Java内存是怎么管理的么?
- NLPIR智能语义:大数据挖掘助力人工智能快速发展
- go语言第一个程序-hello world
- linux标准I/O——按行输入和输出
- 学JAVA要学redis_新手学习Java对Redis简单操作
- 周鸿祎评互联网大佬的编程能力:我能排前三
- css 布局 两行, 三行等高
- Java Web学习笔记07:数据源、JavaBean与MVC模式
- ASP.NET的錯誤類型及錯誤處理方式
- 苹果XR信号差,可否要求苹果公司召回?
- VB:设定 MsgBox 在若干时间之后若无回应则自动关闭
- 努力就一定会成功,这或许是一个问题?
- Java快捷键标识符入门学习
- 适合自学的C语言基础视频教程
- 电脑Windows磁盘修复工具如何使用
- HTML5框架 iframe用法 实现嵌套 好玩用法
- shiro整合ehcache Cannot resolve reference to bean 'securityManager' while setting bean property 'secur
- oreo授权系统V1.1开源版
- mysql求和语句大全_经典SQL语句大全(1)
- 精彩的“利益均衡”,尤其是“四”