performSelector与中括号调用的区别

先简要分别叙述下方法的直接调用和通过performSelector:@selector()调用的区别



-------以oc作为例子,我们平常通常通过中括号调用方法对某目标发送消息,例如[myArray count],如此调用方法的前提是接收信息方已经有相应的方法声明,并且使用处有#import相关的头文件,需要通过编译


-------而对已performSelector而言,相对的来说不需要经过编译检测,而是在运行时系统再为编码者完成发送消息的请求(调用请求),例如[myArray performSelector@selector(count)],严格来说如果编译器没有找到接收者count的声明,会报出警告提醒,当然我们再根据业务需求选择是否忽略警告。当然,如果在运行时调用不成功,程序会crash,因此通常没有特殊排斥时我们需结合- (BOOL)respondsToSelector:(SEL)selector;来检测方法的存在与否。


通常performSelector:会结合objcRuntime运行时为类型添加方法使用,直接人为考虑运行时创造方法和使用方法的逻辑,起到意想不到的效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值