美文网首页
runtime的一些简单用法

runtime的一些简单用法

作者: 西门吹雪123 | 来源:发表于2016-07-14 15:35 被阅读33次

先来简单介绍一下runtime:
我们都知道Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等。
对于Objective-C来说,这个运行时系统就像一个操作系统一样:它让所有的工作可以正常的运行。这个运行时系统即Objc Runtime。Objc Runtime其实是一个Runtime库,它基本上是用C和汇编写的,这个库使得C语言有了面向对象的能力。
我们编写OC代码时候,编译过程中首先会将OC语言转换成runtime(其实就是C语言) - - >然后再变成汇编 - - >最后成机器码。大概理解一下这个原理即可,下面上代码理解一下runtime的一些简单使用。

  • 通过runtime获取一个对象的所有方法:
    #import "objc/runtime.h" //得加入头文件

      unsigned int methCout_f =0;
      Method* methList_f = class_copyMethodList([test class],&methCout_f);
      for(int i=0;i<methCout_f;i++)
      {
      Method temp_f = methList_f[i];
      IMP imp_f = method_getImplementation(temp_f);
      SEL name_f = method_getName(temp_f);
      const char* name_s =sel_getName(method_getName(temp_f));
      int arguments = method_getNumberOfArguments(temp_f);
      const char* encoding =method_getTypeEncoding(temp_f);
      NSLog(@"方法名:%@,参数个数:%d,编码方式:%@",[NSString stringWithUTF8String:name_s],
            arguments,
            [NSString stringWithUTF8String:encoding]);
       }
     free(methList_f);
    
  • 通过runtime获取一个对象的所有属性:
    u_int count;
    objc_property_t *properties = class_copyPropertyList([object class], &count);
    NSMutableArray propertiesArray = [NSMutableArray array];
    for (int i = 0; i < count ; i++)
    {
    const char
    propertyName = property_getName(properties[i]);
    [propertiesArray addObject: [NSString stringWithUTF8String: propertyName]];
    }

    free(properties);
    return propertiesArray;
    
  • 关联对象改变获取值的方式
    //设置一个全局静态指针,
    static char * const associativekey = "associativekey";

     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"what do you want to do?" delegate:self cancelButtonTitle:@"YES" otherButtonTitles:@"cancel", nil];
     [alert show];
    
    __weak typeof(self) weakSelf = self;
    void(^block)(NSInteger) = ^(NSInteger index){
    [weakSelf youWantDoAnyThing];
      NSLog(@"======%d",index);
    };
    objc_setAssociatedObject(alert, associativekey, block, OBJC_ASSOCIATION_COPY);  
     }
    
    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    
    void(^block1)(NSInteger)  = objc_getAssociatedObject(alertView, associativekey);
    
     block1(buttonIndex);
    
    }
    

参考:http://southpeak.github.io/blog/2014/10/25/objective-c-runtime-yun-xing-shi-zhi-lei-yu-dui-xiang/

相关文章

  • runtime的一些简单用法

    先来简单介绍一下runtime:我们都知道Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时...

  • Runtime快速上手(1)

    依照惯例跳过Runtime的介绍,这里只介绍Runtime的基本用法和简单应用例子。 一、获取属性列表 输出结果:...

  • Runtime简单用法

    runtime简称运行时,也就是在运行时候的一些机制。对于oc函数,属于动态调用过程,在编译的时候并不能决定真正调...

  • Runtime简单用法

    首先介绍方法: 用法: 首先写一个 Person 类: 然后在另一个类或 main 函数中来尝试方法: 关于运行时...

  • RunTime的一些用法

    RunTime简介 RunTime简称运行时.OC就是运行时机制,其中最主要的是消息机制 对于OC来说,在编译的时...

  • Runtime 的一些用法

    一. 字典转模型 利用Runtime遍历所有的属性或者成员变量利用KVC设值 二. 设置和获取成员变量的值 obj...

  • iOS runtime的简单用法

    OC语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代...

  • ios - runtime运行时应用---交换方法

    runtime运行时用法之一 --- 交换类的方法,此处简单写了把系统的UIView的setBackgroundC...

  • ios - runtime运行时应用---交换方法

    runtime运行时用法之一 --- 交换类的方法,此处简单写了把系统的UIView的setBackgroundC...

  • iOS面试点文章链接

    runtime基础方法、用法、消息转发、super: runtime 完整总结 runloop源码、runloop...

网友评论

      本文标题:runtime的一些简单用法

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