您的位置:首页 > 移动开发 > IOS开发

iOS获取对象属性列表

2016-01-04 10:36 309 查看
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: