使用@selector动态加载方法

Objective-C能够动态识别方法,通过在运行时实用@selector方法,动态加载需要的方法。这是Objective-C灵活性的一点儿。这里简单说说如何使用@selector动态加载方法。

如何定义@selector?
        通过Objective-C的SEL关键字可以定义一个selector,简单定义如下:


        SEL selName = @selector(methodName);
       

不过需要注意的是,这里的methodName是方法名,不能加引号的。但这点似乎并不能完全满足动态加载的要求,如果用户需要自行加载一个方法呢?如果 能够使用一个NSString对象来传递用户自行加载的方法则更灵活的多,行不行呢?当然可以,我们可以使用如下方法来定义一个SEL:

SEL selName = NSSelectorFromString(methodNameString);
       

NSSelectorFromString(NSString *)方法可以通过传递一个NSString对象来创建一个selector,这样就方便多了。不过需要注意的是,这个NSString对象的内容一定要符合方法命名规则,以免出错。

如何使用@selector?
只定义不使用这没有什么用。任何对象都是继承自NSObject,NSObject自身有selector的使用方法。这里说两个,一个是判断selector方法是否存在,一个是执行selector动态加载的方法。
判断selector加载方法存在的方法:

respondsToSelector:SEL。如果SEL加载方法存在,则返回YES,如果不存在则返回NO。
        

执行selector的方法:performSelector:SEL。

该方法将执行被加载的方法。但是,有的方法需要传递参数,这怎么办呢?不要紧,还有一个配套方法:performSelector:SEL withObject:,如果参数不止一个,还可以继续withObject。不过目前只支持两个参数传递,如果想传递多个参数,不妨考虑使用NSArray或者集合对象。这两个方法均是由NSObject Protocol定义的。

实例:

SEL conTag = NSSelectorFromString(tag);
    if ([self respondsToSelector:conTag]) {
        [self performSelector:conTag
                   withObject:[NSNumber numberWithDouble:first]
                   withObject:[NSNumber numberWithDouble:second]];
    }

转载于:https://my.oschina.net/jack088/blog/3053230

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值