记录一下
runtime
实际运用,更加了解一下runtime
一、为所有的类添加打印私有属性的功能
为
NSObject
添加分类
- NSObject+Extension.h
#import <Foundation/Foundation.h>
@interface NSObject (Extension)
/**
* 获取类中所有的属性
*
* @return 所有属性数组
*/
+ (NSArray *)property_names;
@end
- NSObject+Extension.m
#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);
- 打印结果