iOS获取对象属性列表

#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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值