zoukankan      html  css  js  c++  java
  • 获取类属性 变量 方法

    #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
    
  • 相关阅读:
    [Linux] Linux文件系统目录描述简介
    面试题07 二叉树两节点的最低公共祖先 [树]
    [C++] Stack / queue / priority_queue
    c#中byte[]和string的转换
    smartassembly 使用方法
    关于 Expression Blend 4安装是出现的“意见安排重启您的计算机”的解决方法
    php图片压缩
    我的dota之路
    OO系统设计师之路设计模型系列(1)软件架构和软件框架[从老博客搬家至此]
    const用法详解
  • 原文地址:https://www.cnblogs.com/gulong/p/11598641.html
Copyright © 2011-2022 走看看