RunTime的简单应用

首先就是在.m文件导入头文件

#import "objc/runtime.h"

通过RunTime对一个类的成员变量进行遍历

 unsigned int numIvars; //成员变量个数
    
    Ivar *vars = class_copyIvarList(NSClassFromString(@"UITextField"), &numIvars);
    
    NSString *key=[NSString new];
    
    for(int i = 0; i < numIvars; i++) {
        
        
        Ivar thisIvar = vars[i];
        
        key = [NSString stringWithUTF8String:ivar_getName(thisIvar)];  //获取成员变量的名字
        
        NSLog(@"成员变量的名字 ==== :%@", key);
        
        key = [NSString stringWithUTF8String:ivar_getTypeEncoding(thisIvar)]; //获取成员变量的数据类型
        
        NSLog(@"成员变量的数据类型 ===  :%@", key);
        
    }
    
    free(vars);

通过RunTime对一个类的成员函数进行遍历

    unsigned int numMeths; //成员函数的个数
    Method *meth = class_copyMethodList(NSClassFromString(@"UIView"), &numIvars);
        
    for(int i = 0; i < numMeths; i++) {
        
        Method thisMeth = meth[i];
        SEL sel = method_getName(thisMeth);
        
        const char *name = sel_getName(sel);
        
        NSLog(@"成员函数===== :%s", name);
        
    }
    
    free(meth);

应用理念就是通过RunTime获取我们想要的一个类的成员变量的名称。然后我们可以通过KVC的方式获得其对象,进而进行操作。


下面有一个应用的小例子

RunTime的简单应用_第1张图片
最初的图.png

通过RunTime获取成员变量的名称

  unsigned int numIvars; //成员变量个数
  
  Ivar *vars = class_copyIvarList(NSClassFromString(@"UISearchBar"), &numIvars);
  
  NSString *key=[NSString new];
  
  for(int i = 0; i < numIvars; i++) {
      
      
      Ivar thisIvar = vars[i];
      
      key = [NSString stringWithUTF8String:ivar_getName(thisIvar)];  //获取成员变量的名字
      
      NSLog(@"成员变量的名字 ==== :%@", key);
      
      key = [NSString stringWithUTF8String:ivar_getTypeEncoding(thisIvar)]; //获取成员变量的数据类型
      
      NSLog(@"成员变量的数据类型 ===  :%@", key);
      
  }
  
  free(vars);

然后通过KVC获取对象

self.searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(12, 12,kWindowW-12*2-60, 32)];
    _searchBar.layer.cornerRadius = 16;
    _searchBar.layer.masksToBounds = YES;
    _searchBar.delegate = self;
    _searchBar.keyboardType = UIKeyboardAppearanceDefault;
    _searchBar.placeholder =  @"输入手机号码或名字";
    _searchBar.barStyle = UIBarStyleDefault;
    _searchBar.barTintColor = [UIColor greenColor];
    [searchHeaderView addSubview:_searchBar];

       //去掉搜索图标
    UITextField *searchField = [_searchBar valueForKey:@"_searchField"];//_searchField就是通过RunTime找到的成员变量的名称。
    searchField.leftView = nil;
    searchField.clipsToBounds = YES;

    //    同理可以更改placeholder的颜色
    //    [searchField setValue:[UIColor purpleColor] forKeyPath:@"_placeholderLabel.textColor"];

RunTime的简单应用_第2张图片
最终的图.png

想要一起学习的童鞋们可以加一下!!!!!

RunTime的简单应用_第3张图片
学习交流群

你可能感兴趣的:(RunTime的简单应用)