NSObject常用方法总结

  • -(BOOL) isKindOfClass: classObj 用来判断是否是某个类或其子类的实例
  • -(BOOL) isMemberOfClass: classObj 用来判断是否是某个类的实例
  • -(BOOL) respondsToSelector: selector 用来判断是否有以某个名字命名的方法(被封装在一个selector的对象里传递)
  • +(BOOL) instancesRespondToSelector: selector 用来判断实例是否有以某个名字命名的方法. 和上面一个不同之处在于, 前面这个方法可以用在实例和类上,而此方法只能用在类上.
  • -(id) performSelector: selector调用选择器方法
  • respondsToSelector判断是否实现了某方法
NSObject *obj;
    SEL sel = @selector(start:);//指定action
    if ([obj respondsToSelector:sel]) {//判断该对象是否有响应的方法
        NSLog(@"---调用选择器方法---");
        [obj performSelector:sel withObject:self];//调用选择器方法
    }else{
        NSLog(@"---该对象没有对应的响应方法---");
    }

使用[[UIApplication sharedApplication] keyWindow]查找应用程序的主窗口对象
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Tester : NSObject
-(void)test:(NSString*)msg;
-(void)notImp;

@end

NS_ASSUME_NONNULL_END

#import "Tester.h"

@implementation Tester
-(void)test:(NSString*) msg{
    NSLog(@"---***%@",msg);
}
//注意:没有实现notImp方法

@end

应用实例示例如下:

-(void)func{
    ImageCell *imageCell = [[ImageCell alloc] init];
    
    //用来判断是否是某个类 或 其子类的实例
    BOOL isTableViewCell = [imageCell isKindOfClass:UITableViewCell.class];
    NSLog(@"---isTableViewCell:%d",isTableViewCell);
    
    //用来判断是否是某个类的实例
    BOOL isMemberOfClass = [imageCell isMemberOfClass:imageCell.class];
    NSLog(@"---isMemberOfClass:%d",isMemberOfClass);
    
    //用来判断是否有以某个名字命名的方法(被封装在一个selector的对象里传递)
    BOOL isExist_setupUI = [imageCell respondsToSelector:@selector(setupUI)];
    NSLog(@"---isExit_setupUI:%d",isExist_setupUI);
    NSLog(@"---isExit_setupUI:%d",[imageCell respondsToSelector:@selector(awakeFromNib)]);
    //用来判断实例是否有以某个名字命名的方法,和上面一个不同之处在于,前面这个方法可以用在实例和类上,而次方法只能用在类上
    NSLog(@"---isExit_setupUI:%d",[ImageCell instancesRespondToSelector:@selector(setupUI)]);
    if ([ImageCell instancesRespondToSelector:@selector(testNI)]) {
        [imageCell performSelector:@selector(testNI)];
    }
    
    NSObject *obj;
    SEL sel = @selector(start:);//指定action
    if ([obj respondsToSelector:sel]) {//判断该对象是否有响应的方法
        NSLog(@"---调用选择器方法---");
        [obj performSelector:sel withObject:self];//调用选择器方法
    }else{
        NSLog(@"---该对象没有对应的响应方法---");
    }
    
    id tester = [[Tester alloc] init];
    //注意:这里使用id
    SEL testSelector = @selector(test:);
    SEL notImpSelector = @selector(notImp:);
    
    if ([tester respondsToSelector:testSelector]) {
        //tester.m中实现了test方法
        [tester test:@"invoke test method"];
    }
    if ([tester respondsToSelector:notImpSelector]) {
        //tester.m中没有实现此方法
        [tester notImp];
    }
    
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值