利用runtime获取对象的所有属性(值),所有方法

首先奉上demo的地址
https://github.com/MyHZ/HZCoding.git
还有 pod 'NSObject+HZCoding'

接下来直接上代码了

新建一个类别
NSObject+HZCoding

然后声明和实现如下方法

1.获取对象的所有属性

/* 获取对象的所有属性 */
-(NSArray *)getAllProperties
{
    u_int count;
    // 传递count的地址过去 &count
    objc_property_t *properties  =class_copyPropertyList([self class], &count);
    //arrayWithCapacity的效率稍微高那么一丢丢
    NSMutableArray *propertiesArray = [NSMutableArray arrayWithCapacity:count];
    
    for (int i = 0; i < count ; i++)
    {
        //此刻得到的propertyName为c语言的字符串
        const char* propertyName =property_getName(properties[i]);
        //此步骤把c语言的字符串转换为OC的NSString
        [propertiesArray addObject: [NSString stringWithUTF8String: propertyName]];
    }
    //class_copyPropertyList底层为C语言,所以我们一定要记得释放properties
    // You must free the array with free().
    free(properties);
    
    return propertiesArray;
}
  1. 获取对象的所有方法
/* 获取对象的所有方法 */
-(NSArray *)getAllMethods
{
    unsigned int methodCount =0;
    Method* methodList = class_copyMethodList([self class],&methodCount);
    NSMutableArray *methodsArray = [NSMutableArray arrayWithCapacity:methodCount];
    
    for(int i=0;i

3.获取对象的所有属性和属性内容

/* 获取对象的所有属性和属性内容 */
-(NSDictionary *)getAllPropertiesAndVaules
{
    NSMutableDictionary *propsDic = [NSMutableDictionary dictionary];
    unsigned int outCount;
    objc_property_t *properties =class_copyPropertyList([self class], &outCount);
    for ( int i = 0; i

打个广告
一句话 利用runtime轻松实现 归档解档:http://www.jianshu.com/p/14d0190a83d5

你可能感兴趣的:(利用runtime获取对象的所有属性(值),所有方法)