美文网首页
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