iOS获取对象属性列表

来源:互联网 发布:淘宝哪些北美代购正品 编辑:程序博客网 时间:2024/06/10 03:51
#import "A.h"#import <objc/runtime.h>@implementation A//获取对象的所有属性,不包括属性值-(NSArray *)getAllProperty{    u_int count;    objc_property_t *properties = class_copyPropertyList([self class], &count);    NSMutableArray *propertiesArray = [NSMutableArray arrayWithCapacity:count];    for (int i = 0; i < count; i++)    {        const char *propertyName = property_getName(properties[i]);        [propertiesArray addObject:[NSString stringWithUTF8String:propertyName]];    }    free(properties);    return propertiesArray;}
//获取对象的所有属性,包括属性值-(NSDictionary *)propertiesAndValue{    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];    unsigned int count;    objc_property_t *properties = class_copyPropertyList([self class], &count);    for (int i = 0; i <count; i++)    {        const char *char_f = property_getName(properties[i]);        NSString *propertyName = [NSString stringWithUTF8String:char_f];        id propertyValue = [self valueForKey:(NSString*)propertyName];        if (propertyValue)        {            [dictionary setObject:propertyValue forKey:propertyName];        }    }    free(properties);    return dictionary;}
//获取对象的所有方法-(void)printMothodList{    unsigned int mothedCount_f = 0;    Method *mothedList_f = class_copyMethodList([self class], &mothedCount_f);    for (int i = 0; i < mothedCount_f; i++)    {        Method temp_f = mothedList_f[i];        IMP imp_f = method_getImplementation(temp_f);        SEL name_f = method_getName(temp_f);        const char *name_s = sel_getName(method_getName(temp_f));        int arguments = method_getNumberOfArguments(temp_f);        const char *encoding = method_getTypeEncoding(temp_f);        NSLog(@"方法名:%@, 参数个数:%d ,编码方式:%@",[NSString stringWithUTF8String:name_s],arguments,[NSString stringWithUTF8String:encoding]);    }    free(mothedList_f);}@end
0 0