美文网首页
runtime获取类属性列表和方法列表

runtime获取类属性列表和方法列表

作者: 同窗四载 | 来源:发表于2017-07-04 10:40 被阅读0次

获取对象的所有属性

/* 获取对象的所有属性 */
+(NSArray *)getAllProperties
{
    u_int count;
    // 传递count的地址过去 &count
    objc_property_t *properties  =class_copyPropertyList([self class], &count);
    //arrayWithCapacity的效率稍微高那么一丢丢
    NSMutableArray *propertiesArray = [NSMutableArray arrayWithCapacity:count];

    for (int i = 0; i < count ; i++)
    {
        //此刻得到的propertyName为c语言的字符串
        const char* propertyName =property_getName(properties[i]);
        //此步骤把c语言的字符串转换为OC的NSString
        [propertiesArray addObject: [NSString stringWithUTF8String: propertyName]];
    }
    //class_copyPropertyList底层为C语言,所以我们一定要记得释放properties
    // You must free the array with free().
    free(properties);

    return propertiesArray;
}  ```
#### 获取对象所有方法

/* 获取对象的所有方法 */
+(NSArray )getAllMethods
{
unsigned int methodCount =0;
Method
methodList = class_copyMethodList([self class],&methodCount);
NSMutableArray *methodsArray = [NSMutableArray arrayWithCapacity:methodCount];

for(int i=0;i<methodCount;i++)
{
    Method temp = methodList[i];
    IMP imp = method_getImplementation(temp);
    SEL name_f = method_getName(temp);
    const char* name_s =sel_getName(method_getName(temp));
    int arguments = method_getNumberOfArguments(temp);
    const char* encoding =method_getTypeEncoding(temp);
    NSLog(@"方法名:%@,参数个数:%d,编码方式:%@",[NSString stringWithUTF8String:name_s],
          arguments,
          [NSString stringWithUTF8String:encoding]);
    [methodsArray addObject:[NSString stringWithUTF8String:name_s]];
}
free(methodList);
return methodsArray;

} ```

获取对象的所有属性和属性内容

/* 获取对象的所有属性和属性内容 */
+ (NSDictionary *)getAllPropertiesAndVaules:(NSObject *)obj
{
    NSMutableDictionary *propsDic = [NSMutableDictionary dictionary];
    unsigned int outCount;
    objc_property_t *properties =class_copyPropertyList([obj class], &outCount);
    for ( int i = 0; i<outCount; i++)
    {
        objc_property_t property = properties[i];
        const char* char_f =property_getName(property);
        NSString *propertyName = [NSString stringWithUTF8String:char_f];
        id propertyValue = [obj valueForKey:(NSString *)propertyName];
        if (propertyValue) {
            [propsDic setObject:propertyValue forKey:propertyName];
        }
    }
    free(properties);
    return propsDic;
} ```

#### 用的时候记得导入头文件

import <objc/runtime.h> ```

相关文章

  • 关于类对象和类方法 实例方法的runtime理解

    1.通过runtime 可以获取方法列表和属性(其中方法列表可以是实例方法列表也可以是类方法列表) 1.获取方法列...

  • iOS中Runtime常用示例

    Runtime的内容大概有:动态获取类名、动态获取类的成员变量、动态获取类的属性列表、动态获取类的方法列表、动态获...

  • iOS-Runtime

    Runtime的内容大概有:动态获取类名、动态获取类的成员变量、动态获取类的属性列表、动态获取类的方法列表、动态获...

  • runtime获取类的属性列表和方法列表

    新建一个Animal类 给类添加一些成员变量、属性、和方法。 在控制器里面使用该类 并 给相应的变量赋值 //...

  • ios中runtime 笔记

    常见方法 1.获取属性列表 2.获取方法列表 3,获取成员变量列表 4,获取协议列表 5,获得类方法

  • 消息转发机制

    RunTime: 1、获取所有的属性列表、方法列表、协议列表 2、方法交换 3、方法拦截调用,容错处理 4、动态添...

  • runtime-第一篇

    第一次接触runtime,先介绍下自学的几个runtime方法 1.获取类的属性列表 先导入runtime文件 #...

  • runtime基础

    目前我所了解的Runtime内容大约有:动态获取类名、动态获取类的成员变量、动态获取类的属性列表、动态获取类的方法...

  • runtime获取类属性列表和方法列表

    获取对象的所有属性 /* 获取对象的所有方法 */+(NSArray )getAllMethods{unsigne...

  • iOS获取手机上安装的APP的名称和版本

    获取到LSApplicationWorkspace的对象可以通过runtime得到该对象的所有属性和方法列表,然后...

网友评论

      本文标题:runtime获取类属性列表和方法列表

      本文链接:https://www.haomeiwen.com/subject/ycvthxtx.html