NSObject一些比较常用的方法和简单的反射

#pragma mark NSObject常用方法

// 判断是否为aClass或者aClass的子类的实例

- (BOOL)isKindOfClass:(Class)aClass;

// 判断是否为aClass的实例(不包括aClass的子类)

- (BOOL)isMemberOfClass:(Class)aClass;

// 判断对象是否实现了aProtocol协议

- (BOOL)conformsToProtocol:(Protocol *)aProtocol;

// 判断这个类的对象是否拥有参数提供的方法

- (BOOL)respondsToSelector:(SEL)aSelector;

// 取消执行

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument;


@代码示例:

    Student *stu = [[[Student alloc] init] autorelease];
    
    // isKindOfClass判断对象是否属于某个类 或者 子类
    if ( [stu isKindOfClass:[Person class]] ) {
        // NSLog(@"stu属于Person或者继承自Person");
    }
    
    // isMemberOfClass判断对象是否属于某个类(不包括子类)
    BOOL result = [stu isMemberOfClass:[Student class]];
    // NSLog(@"%i", result);
    
    // 假设Student里面有了test方法和test:方法
    // 直接调用
    [stu test];
    
    // 间接调用
    [stu performSelector:@selector(test)];
    
    // 间接带参数调用
    [stu performSelector:@selector(test2:) withObject:@"abc"];
    
    // 延迟2秒后调用test2:方法
    [stu performSelector:@selector(test2:) withObject:@"abc" afterDelay:2];


#pragma mark 反射

    // 类的反射
    NSString *str = @"Person";
    Class class = NSClassFromString(str);
    
    Person *person = [[class alloc] init];
    NSLog(@"%@", person);
    
    
    // Class变成字符串
    NSString *name =  NSStringFromClass([Person class]);
    
    
    // 方法的反射
    NSString *method = @"test";
    SEL selector = NSSelectorFromString(method);
    [person performSelector:selector];
    
    // 将SEL转换为字符串
    NSString *selectorName = NSStringFromSelector(selector);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值