iOS-SEL的用法和讲解
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的用法和讲解相关推荐
- python 安卓模拟点击_python模拟点击在ios中实现的实例讲解
我们都知道因为操作系统的不同,很多游戏区分为安卓和苹果两个版本.那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版 ...
- python实现安卓点击_python模拟点击在ios中实现的实例讲解
我们都知道因为操作系统的不同,很多游戏区分为安卓和苹果两个版本.那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版 ...
- python模拟点击屏幕ios_python模拟点击在ios中实现的实例讲解
我们都知道因为操作系统的不同,很多游戏区分为安卓和苹果两个版本.那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版 ...
- IOS SEL (@selector) 原理及使用总结(一)
SEL 类成员方法的指针 可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应 ...
- iOS显示性能优化过程讲解
点我跳转原文地址 卡顿的原理 iOS系统界面滑动流畅性的保持主要是依靠CPU和GPU两大处理硬件间通力合作的结果,一个视图的显示需要先经过CPU创建.布局计算.对图片解码.文本绘制,然后CPU将计算的 ...
- iOS 内购的最新讲解
来源:简书 - IIronMan 链接:http://www.jianshu.com/p/4f8a854ff427(点击尾部阅读原文前往) 一.总说内购的内容 1.协议.税务和银行业务 信息填写 2. ...
- iOS SEL类型和创建
SEL selAction =NSSelectorFromString([actionArrayobjectAtIndex:indexArray]); [item addTarget:self act ...
- iOS应用中的素材讲解
贴出一些参考的文章: 1.iPhone屏幕尺寸.分辨率及适配 一.切图常说的"@1X @2X @3X" 苹果IOS程序开发不同分辨率的设备统一为一个尺寸而标记的.@3X就是@1X分 ...
- ios数组基本用法和排序
1.创建数组 [objc] view plaincopy // 创建一个空的数组 NSArray *array = [NSArray array]; // 创建有1个元素的数组 array = [NS ...
- ios 打印 详细错误日志_iOS中打印系统详细日志
Q:如何打印当前的函数和行号? A:我们可以在打印时使用一些预编译宏作为打印参数,来打印当前的函数和行号.如: 1 NSLog(@"%s:%d obj=%@", __func__, ...
最新文章
- linux安装mysql5.7自己初始化_linux系统安装mysql5.7步骤
- winform生命周期(备忘)
- 阿里云配置tornado无法访问
- Oracle索引或这类索引的分区处于不可用状态 查询
- 敏捷项目开源管理软件ScrumBasic(2)- 多项目支持
- C#10在List, Queue 以及Stack中使用EnsureCapacity方法来提升性能
- python连接mysql查询一个数据_使用Connector / Python连接MySQL/查询数据
- java 对象视图框架_Stripes视图框架Java对象属性验证和prototype.js Ajax的测试
- React性能优化总结
- 三极晶体管放大电路实验
- windows10专业版镜像
- linux 搭建论坛(虚拟机)
- 【Qt】Qt6系列教程汇总
- 【STM32多级界面】-LCD结构体多级图形界面框架
- sysctl -p 报错 is an unknown key
- (一)权限管理系统介绍
- 一文详解泊车感知的摄像头需求
- Reflect是什么?
- 智能图像识别产品开发流程 OCR 图像识别
- MySQL查询字典表
热门文章
- 称重仪表显示ol怎么解决_称重仪表显示Erd和数字是怎么回事?
- 如何写好一份 30 K offer 的简历(建议收藏)
- springboot2 druid监控控制台去掉下面的图片广告和powered by
- 使用虚拟鼠标驱动解决Surface go以及寨板win10 win11 win8平台 甚至win arm手机 在运行某些GalGame 当不插入鼠标或者连接蓝牙鼠标时候出现的错误
- 一个前端报表设计器的设计分析
- 北京内推 | 微软亚洲研究院自然语言计算组招聘NLP研究实习生
- SpringBoot+Vue项目的PDF导出及给PDF文件盖章的功能示例
- 从零搭建Angular10项目
- siebel基础配置
- 线性独立成分分析(ICA)与鸡尾酒会问题