标题:
使用@selector动态加载方法
[打印本页]
作者:
look_w
时间:
2019-2-18 19:15
标题:
使用@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]];
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0