iOS 【消息处理 performSelector】

本文详细探讨了iOS中performSelector的使用及其与直接调用方法的区别。介绍了performSelector如何传递不同数量的参数,包括结构体,以及如何在不同线程环境下正确使用。此外,还讨论了防止按钮多次点击的实现策略。
摘要由CSDN通过智能技术生成

performSelector和直接调用方法的区别

performSelector: withObject:是在iOS中的一种方法调用方式。他可以向一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以这也是runtime的一种应用方式。

所以performSelector和直接调用方法的区别就在与runtime。直接调用编译是会自动校验。如果方法不存在,那么直接调用 在编译时候就能够发现,编译器会直接报错。
但是使用performSelector的话一定是在运行时候才能发现,如果此方法不存在就会崩溃。所以如果使用performSelector的话他就会有个最佳伴侣- (BOOL)respondsToSelector:(SEL)aSelector;来在运行时判断对象是否响应此方法。

performSelector的使用

第一种:无参数传递

[self performSelector:@selector(SelectorNoParameter)];
- (void)SelectorNoParameter{

    NSLog(@"SelectorNoParameter");
}

第二种:传递一个参数

[self performSelector:@selector(SelectorOneParameter:) withObject:@"firstParameter"];
- (void)SelectorOneParameter:(NSString *)first{

    NSLog(@"Logs: %@", first);
}

第三种:传递两个参数

[self performSelector:@selector(SelectorFirstParameter:SecondParameter:) withObject:@"firstParameter" withObject:@"secondParameter"];
- (void)SelectorFirstParameter:(NSString *)first SecondParameter:(NSString *)second{

    NSLog(@"Logs %@ %@", first, second);
}

第四种:建立动态的函数,然后调用它们

NSArray *objectArray = @[@{
   @"methodName":@"DynamicParameterString:",@"value":@"String"},@{
   @"methodName":@"DynamicParameterNumber:",@"value":@2}];
for (NSDictionary *dic in objectArray) {

    [self performSelector:NSSelectorFromString([dic objectForKey:@"methodName"]) withObject:[dic objectForKey:@"value"]];
}
- (void)DynamicParameterString:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值