1:什么是SEL:
可理解成@selector(),方法选择器。于是乎就可说成是C中的指针函数。而在oc里不能用指针函数,所有就只能搞一个@selector这来取了。
他的结果是SEL类型,用assgin修饰。去取方法的编号(函数地址)

2:使用
2.1 示例代码
SELView.h

/**SEL实现*/
#import <UIKit/UIKit.h>@interface SELView : UIView/**自定义的SEL*/
@property (nonatomic, assign) SEL  customMethod;
/**正常调用函数*/
-(void)printfString:(NSString *)msg;/**SEL调用*/
-(void)testMethod;
/**SEL调用带参数*/
-(void)testMethod:(NSString *)msg;-(void)runMethod;
@end

SELView.m

#import "SELView.h"@implementation SELView-(void)printfString:(NSString *)msg {NSLog(@"-----printfString%@",msg);
}/**无参数函数*/
-(void)testMethod{NSLog(@"-----testMethod");
}
/**有参数函数*/
-(void)testMethod:(NSString *)msg {NSLog(@"-----(有参数函数)testMethod:%@",msg);
}-(void)runMethod{if (_customMethod) {[self performSelector:_customMethod withObject:nil];}
}

2.2 调用详解

//实例化对象
SELView *views = [[SELView alloc] init];

2.2.1 正常调用的方式如下

[views printfString:@"1:自定义的打印功能"];

2.2.2 传入SEL方法调用
NOTICE:这里我们用的@selector方法一定要是当前SEL类中的函数,应为当前Class是一个isa指针,而这个@selector就是调用当前isa中方法,取其中的编号。

/**传入的方法*/
views.customMethod = @selector(testMethod);

这里的testMethod就是当前views中的方法。否则当前对象无target,就会有错!
2.2.3 执行Selector和传参

/**无参数函数*/
[views performSelector:@selector(testMethod)];
/**有参数函数*/
[views performSelector:@selector(testMethod:) withObject:@"传入参数"];

2.2.4 SEL和NSString装换

/**将一个字符串转换成SEL类型*/
//SEL s1 = NSSelectorFromString(@"customClick");
SEL s2 = @selector(customClick);
[self performSelector:s2];

NOTICE:这个时候会有一个提示performselectorm may cause a leak because its selector is unknow,在ARC模式下,运行时需要知道如何处理你正在调用的方法的返回值。这个返回值可以是任意值,如 void , int , char , NSString , id 等等。ARC通过头文件的函数定义来得到这些信息。所以平时我们用到的静态选择器就不会出现这个警告。因为在编译期间,这些信息都已经确定。
而使用 [someController performSelector: NSSelectorFromString(@“customClick”)]; 时ARC并不知道该方法的返回值是什么。最后搞的什么鬼都不认识了。如何处理 请各位看官看我的下一篇文章。如何解决。

有些地方说的不到位,还请各位看官指正。。。

  • 欢迎各位一块学习,提高逼格!
  • 也可以添加洲洲哥的微信公众号

可以来微信公众号(洲洲哥)后台给我们留言。 快来扫码关注我们吧!

iOS-SEL的用法和讲解相关推荐

  1. python 安卓模拟点击_python模拟点击在ios中实现的实例讲解

    我们都知道因为操作系统的不同,很多游戏区分为安卓和苹果两个版本.那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版 ...

  2. python实现安卓点击_python模拟点击在ios中实现的实例讲解

    我们都知道因为操作系统的不同,很多游戏区分为安卓和苹果两个版本.那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版 ...

  3. python模拟点击屏幕ios_python模拟点击在ios中实现的实例讲解

    我们都知道因为操作系统的不同,很多游戏区分为安卓和苹果两个版本.那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版 ...

  4. IOS SEL (@selector) 原理及使用总结(一)

    SEL 类成员方法的指针 可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应 ...

  5. iOS显示性能优化过程讲解

    点我跳转原文地址 卡顿的原理 iOS系统界面滑动流畅性的保持主要是依靠CPU和GPU两大处理硬件间通力合作的结果,一个视图的显示需要先经过CPU创建.布局计算.对图片解码.文本绘制,然后CPU将计算的 ...

  6. iOS 内购的最新讲解

    来源:简书 - IIronMan 链接:http://www.jianshu.com/p/4f8a854ff427(点击尾部阅读原文前往) 一.总说内购的内容 1.协议.税务和银行业务 信息填写 2. ...

  7. iOS SEL类型和创建

    SEL selAction =NSSelectorFromString([actionArrayobjectAtIndex:indexArray]); [item addTarget:self act ...

  8. iOS应用中的素材讲解

    贴出一些参考的文章: 1.iPhone屏幕尺寸.分辨率及适配 一.切图常说的"@1X @2X @3X" 苹果IOS程序开发不同分辨率的设备统一为一个尺寸而标记的.@3X就是@1X分 ...

  9. ios数组基本用法和排序

    1.创建数组 [objc] view plaincopy // 创建一个空的数组 NSArray *array = [NSArray array]; // 创建有1个元素的数组 array = [NS ...

  10. ios 打印 详细错误日志_iOS中打印系统详细日志

    Q:如何打印当前的函数和行号? A:我们可以在打印时使用一些预编译宏作为打印参数,来打印当前的函数和行号.如: 1 NSLog(@"%s:%d obj=%@", __func__, ...

最新文章

  1. linux安装mysql5.7自己初始化_linux系统安装mysql5.7步骤
  2. winform生命周期(备忘)
  3. 阿里云配置tornado无法访问
  4. Oracle索引或这类索引的分区处于不可用状态 查询
  5. 敏捷项目开源管理软件ScrumBasic(2)- 多项目支持
  6. C#10在List, Queue 以及Stack中使用EnsureCapacity方法来提升性能
  7. python连接mysql查询一个数据_使用Connector / Python连接MySQL/查询数据
  8. java 对象视图框架_Stripes视图框架Java对象属性验证和prototype.js Ajax的测试
  9. React性能优化总结
  10. 三极晶体管放大电路实验
  11. windows10专业版镜像
  12. linux 搭建论坛(虚拟机)
  13. 【Qt】Qt6系列教程汇总
  14. 【STM32多级界面】-LCD结构体多级图形界面框架
  15. sysctl -p 报错 is an unknown key
  16. (一)权限管理系统介绍
  17. 一文详解泊车感知的摄像头需求
  18. Reflect是什么?
  19. 智能图像识别产品开发流程 OCR 图像识别
  20. MySQL查询字典表

热门文章

  1. 称重仪表显示ol怎么解决_称重仪表显示Erd和数字是怎么回事?
  2. 如何写好一份 30 K offer 的简历(建议收藏)
  3. springboot2 druid监控控制台去掉下面的图片广告和powered by
  4. 使用虚拟鼠标驱动解决Surface go以及寨板win10 win11 win8平台 甚至win arm手机 在运行某些GalGame 当不插入鼠标或者连接蓝牙鼠标时候出现的错误
  5. 一个前端报表设计器的设计分析
  6. 北京内推 | 微软亚洲研究院自然语言计算组招聘NLP研究实习生
  7. SpringBoot+Vue项目的PDF导出及给PDF文件盖章的功能示例
  8. 从零搭建Angular10项目
  9. siebel基础配置
  10. 线性独立成分分析(ICA)与鸡尾酒会问题