美文网首页
runtime实际运用

runtime实际运用

作者: 耿杰 | 来源:发表于2016-01-22 09:45 被阅读75次

记录一下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);
  • 打印结果
Snip20160111_13.png

相关文章

网友评论

      本文标题:runtime实际运用

      本文链接:https://www.haomeiwen.com/subject/bvzqkttx.html