Objective-C Selector Methods

在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 !

blogroll

social