在Objective-C中对Selector的操作
今天调试程序中的一个bug,iOS6版本系统中使用NSUserDefaults
类的initWithSuiteName
方法会crash
想起来可以判断NSUserDefaults
是否响应initWithSuiteName
这个方法来不同调用。
使用了respondsToSelector
这个类方法,以为没有问题,结果没有进入这个if里面,居然判断失败了
好吧,那就把关于Selector的所有的方法都整理一下,以免以后再使用错误了。
+(BOOL)respondsToSelector:(SEL)aSelector;
判断该类是否响应类方法。
if ([NSUserDefaults respondsToSelector:@selector(standardUserDefaults)]) {
//true
}
-(BOOL)respondsToSelector:(SEL)aSelector;
判断实例是否响应该方法
NSUserDefaults * userDefault = [NSUserDefaults standardUserDefaults];
if ([userDefault respondsToSelector:@selector(objectForKey:)]){
//true
}
+(BOOL)instancesRespondToSelector:(SEL)aSelector;
判断该类的实例是否响应该方法
if ([NSUserDefaults instancesRespondToSelector:@selector(initWithSuiteName:)]) {
//true
}
+(IMP)instanceMethodForSelector:(SEL)aSelector
获取该类的实例方法的IMP实现的地址
IMP kIMPForUserDefault = [NSUserDefaults instanceMethodForSelector:@selector(initWithUser:)];
+(BOOL)resolveInstanceMethod:(SEL)aSelector
Comments !