iOS开发

IOS 遍历未知对象的属性和方法(转)

2018-06-15  本文已影响0人  hypercode

https://blog.csdn.net/crazychickone/article/details/36413671/

/* 注意:要先导入ObjectC运行时头文件,以便调用runtime中的方法*/

#import 

@implementationNSObject (PropertyListing)

1、/* 获取对象的所有属性,不包括属性值 */

- (NSArray *)getAllProperties

{

   u_int count;   

objc_property_t *properties  =class_copyPropertyList([self class], &count); 

NSMutableArray *propertiesArray = [NSMutableArray arrayWithCapacity:count];

for(int i =0; i

    {

const char* propertyName =property_getName(properties[i]);

[propertiesArray addObject: [NSString stringWithUTF8String: propertyName]];

    }   

free(properties);

return propertiesArray; 

}  

2、/* 获取对象的所有属性 以及属性值 */

- (NSDictionary*)properties_aps

{

   NSMutableDictionary *props = [NSMutableDictionarydictionary];   

unsignedintoutCount, i;

objc_property_t*properties =class_copyPropertyList([selfclass], &outCount);

for(i =0; i

    {

objc_property_tproperty = properties[i];

constchar* char_f =property_getName(property);

NSString*propertyName = [NSString stringWithUTF8String:char_f];

idpropertyValue = [self valueForKey:(NSString*)propertyName];

if(propertyValue) [propssetObject:propertyValueforKey:propertyName];

    }   

free(properties);

returnprops;

}   

3、/* 获取对象的所有方法 */

-(void)printMothList

{

unsignedintmothCout_f =0;

Method* mothList_f =class_copyMethodList([selfclass],&mothCout_f);

for(inti=0;i

    {

Methodtemp_f = mothList_f[i];

IMPimp_f =method_getImplementation(temp_f);

SELname_f =method_getName(temp_f);

constchar* name_s =sel_getName(method_getName(temp_f));

intarguments =method_getNumberOfArguments(temp_f);

constchar* encoding =method_getTypeEncoding(temp_f);

NSLog(@"方法名:%@,参数个数:%d,编码方式:%@",[NSStringstringWithUTF8String:name_s],

arguments,[NSString stringWithUTF8String:encoding]);

    }

free(mothList_f);

}

@end 

上一篇下一篇

猜你喜欢

热点阅读