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

iOS反射机制,获取方法名和描述属性

2015-04-20 16:16 267 查看
- (NSString *)serializeObject:(id)theObject
{
NSString *className = NSStringFromClass([theObject class]);

const char *cClassName = [className UTF8String];

id theClass = objc_getClass(cClassName);

unsigned int outCount, i;

//    Method *methods = class_copyMethodList(theClass, &outCount);
//    for (i = 0; i < outCount; i++) {
//
//
//        Method method = methods[i];
//
//        SEL sel = method_getName(method);
//
//        NSLog(@"%@",NSStringFromSelector(sel));
//
//
//    }

objc_property_t *properties = class_copyPropertyList(theClass, &outCount);

NSMutableArray *propertyNames = [[NSMutableArray alloc] initWithCapacity:1];

for (i = 0; i < outCount; i++) {

objc_property_t property = properties[i];

NSString *propertyNameString = [[NSString alloc] initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];

[propertyNames addObject:propertyNameString];

//        [propertyNameString release];

NSLog(@"%s %s\n", property_getName(property), property_getAttributes(property));

}

NSMutableDictionary *finalDict = [[NSMutableDictionary alloc] initWithCapacity:1];

for(NSString *key in propertyNames)
{
SEL selector = NSSelectorFromString(key);
id value = [theObject performSelector:selector];

if (value == nil)
{
value = [NSNull null];
}

[finalDict setObject:value forKey:key];
}

//    [propertyNames release];

//    NSString *retString = [[CJSONSerializer serializer] serializeDictionary:finalDict];
NSString *retString = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:finalDict options:0 error:nil] encoding:NSUTF8StringEncoding];

//    [finalDict release];

return retString;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: