兩個方法都是用來判斷對象(類也屬于對象)是否響應(yīng)某個方法饿敲。
兩方法的聲明:
@protocol NSObject
- (BOOL)respondsToSelector:(SEL)aSelector;
@end
@interface NSObject <NSObject>
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
@end
先來總結(jié)一下:
- 響應(yīng)實例方法
- 類respondsToSelector不能響應(yīng)實例方法。
- 類instancesRespondToSelector能響應(yīng)實例方法困介。
- 實例respondsToSelector能響應(yīng)實例方法绑改。
- 響應(yīng)類方法
- 類respondsToSelector能響應(yīng)類方法。
- 類instancesRespondToSelector不能響應(yīng)類方法仍侥。
- 實例respondsToSelector不能響應(yīng)類方法豁状。
測試代碼如下:
[self compareRespondMethod:[UIView class] selctor:@selector(backgroundColor)];
[self compareRespondMethod:self.view selctor:@selector(backgroundColor)];
[self compareRespondMethod:[UIView class] selctor:@selector(layerClass)];
[self compareRespondMethod:self.view selctor:@selector(layerClass)];
- (void)compareRespondMethod:(id)object selctor:(SEL)selctor{
BOOL isClassRespond = NO,isInstanceRespond = NO;
if ([object isKindOfClass:[UIView class]]) {
if ([object respondsToSelector:selctor]) {
isInstanceRespond = YES;
}
NSLog(@"instance respondsToSelector %@ ",isInstanceRespond?@"YES":@"NO");
}else{
if ([object respondsToSelector:selctor]) {
isClassRespond = YES;
}
if ([object instancesRespondToSelector:selctor]) {
isInstanceRespond = YES;
}
NSLog(@"class respondsToSelector %@ \n class instancesRespondToSelector %@",isClassRespond?@"YES":@"NO",isInstanceRespond?@"YES":@"NO");
}
}
測試結(jié)果
實例方法測試結(jié)果:
class respondsToSelector NO
class instancesRespondToSelector YES
instance respondsToSelector YES
類方法測試結(jié)果:
class respondsToSelector YES
class instancesRespondToSelector NO
instance respondsToSelector NO
再回首看看總結(jié)捉偏,應(yīng)該可以理解倒得。
ps:本文不涉及到類別中的實例方法和類方法,有需要可以自行測試夭禽。