获取类属性 变量 方法

#import <Foundation/Foundation.h>
typedef NSArray<NSString *> GLStringArray;
typedef NSMutableArray<NSString *> GLStringMutableArray;
//@compatibility_alias GLStringMutableArray NSMutableArray<NSString *>;

@interface NSObject (GL)

//变量
@property (nonatomic, class,readonly) GLStringArray * instanceVarNames;
//方法
@property (nonatomic, class,readonly) GLStringArray * instanceMethodNames;
@property (nonatomic, class,readonly) GLStringArray * classMethodNames;
//属性
@property (nonatomic, class,readonly) GLStringArray * propertyNames;

@end

 

#import "NSObject+GL.h"
#import <objc/runtime.h>

@implementation NSObject (GL)

+ (GLStringArray *)instanceVarNames{
    unsigned int m = 0;
    Ivar * ivarList = class_copyIvarList([self class], &m);
    GLStringMutableArray * array = [[GLStringMutableArray alloc] init];
    for (int i = 0; i < m; i ++) {
        Ivar ivar = ivarList[i];
        const char * name = ivar_getName(ivar);
        NSString * str = [NSString stringWithCString:name encoding:NSUTF8StringEncoding];
        if (str) {
            [array addObject:str];
        }
    }
    return array.copy;
}

+ (GLStringArray *)instanceMethodNames{
    return [self gl_methodNamesWithClass:[self class]];
}

+ (GLStringArray *)classMethodNames{
    return [self gl_methodNamesWithClass:object_getClass(self)];
}

+ (GLStringArray *)propertyNames{
    unsigned int m = 0;
    objc_property_t * propertyList = class_copyPropertyList([self class], &m);
    GLStringMutableArray * array = [[GLStringMutableArray alloc] init];
    for (int i = 0; i < m; i ++) {
        objc_property_t property = propertyList[i];
        const char * name = property_getName(property);
        NSString * str = [NSString stringWithCString:name encoding:NSUTF8StringEncoding];
        if (str) {
            [array addObject:str];
        }
    }
    return array.copy;
}

#pragma mark - private
+ (GLStringArray *)gl_methodNamesWithClass:(Class)aClass{
    unsigned int m = 0;
    Method * methodList = class_copyMethodList(aClass, &m);
    GLStringMutableArray * array = [[GLStringMutableArray alloc] init];
    for (int i = 0; i < m; i ++) {
        Method method = methodList[i];
        SEL sel = method_getName(method);
        [array addObject:NSStringFromSelector(sel)];
    }
    return array.copy;
}

@end

 

转载于:https://www.cnblogs.com/gulong/p/11598641.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值