runtime实际运用

2016-01-22  本文已影响75人  耿杰

记录一下runtime实际运用,更加了解一下runtime


一、为所有的类添加打印私有属性的功能

NSObject 添加分类

#import <Foundation/Foundation.h>

@interface NSObject (Extension)

/**
 *  获取类中所有的属性
 *
 *  @return 所有属性数组
 */
+ (NSArray *)property_names;

@end
#import "NSObject+Extension.h"
#import <objc/message.h>
@implementation NSObject (Extension)

+ (NSArray *)property_names
{
    unsigned int outCount;
    
    /* 1、class_copyPropertyList(__unsafe_unretained Class cls, unsigned int *outCount)
     
           Description     获取类(包含分类)中的属性
     
           @param cls      需要检测的类
           @param outCount 存储返回数组的长度,当其值为null返回数组长度为0
     
           @return         返回的数组需要使用free()函数释放
     
     */
    
    // 2、objc_property_t  不透明的类型,表示Objective-C声明的属性
    
    objc_property_t *properties = class_copyPropertyList([self class], &outCount);
    NSMutableArray *props       = [NSMutableArray array];
    
    for (int i = 0; i < outCount; i++)
    {
        objc_property_t property = properties[i];
        
        const char *char_f = property_getName(property);
        
        NSString *propertyName = [NSString stringWithUTF8String: char_f];
        
        [props addObject: propertyName];
    }
    free(properties);
    return props;
}
@end
NSArray *array = [UITextField property_names];
NSLog(@"array:%@", array);
Snip20160111_13.png

上一篇 下一篇

猜你喜欢

热点阅读