[程序员日记]初探Runtime 运行时

1.初识runtime###

Runtime 运行时 用于对于APP流畅度数据加载效率要求较高的App,是一个运行时库(Runtime Library),使用的是C语言汇编语言进行编写。通过Runtime机制,为C语言添加了面向对象的特性,得到我们使用的Objective-C语言

2.runtime简单用法###

(1)函数调用:消息机制####

消息机制 —>
接受体:对象
消息:函数

  [objc   method];

翻译成 —>

   objc_msgSend( objc, @selector( method ) );

objc代表的是本类self

objc_msgSend( objc, methodlist)    //methodlist指向本类super          objc_msgSend( super_objc, methodlist )  //Methodlist指向父类,super_objc本质也指向objc

例如:
OC写法:

[self createUI];

runtime写法:

objc_msgSend(self, @selector(createUI));

再如:
OC写法:

[self startRequestWithURL:@"http://www.baidu.com"];

runtime 写法

objc_msgSend(self, @selector(startRequestWithURL:),@"http://www.baidu.com");

注意:使用runtime需要导入头文件

#import <objc/runtime.h>
#import <objc/message.h>

2.动态的关联属性####

runtime可以进行,与动态扩展有关的还有类别
但是类别只能功能扩展,无法扩展属性

可以对属性扩展的有:
1、静态属性
2、使用运行时扩展属性(关联)

实现属性的关联(在类别中扩展):
1、在类别里创建一个静态的指针(key)

  static  void  *  v_key;

2、实现相应的getter、setter方法

@property  id myValue; 

—>

- (void)setMyValue:(id)objc{objc_setAssociatedObject(self, v_key, myValue, OBJC_ASSOCIATION_RETAIN);}

-(id)myValue{objc_getAssociatedObject(self, v_key);

}

例如:
定义一个类别NSString+MyCategary 在其中对NSString 进行属性扩展,定义一个属性name,类型为NSString,当操作时会产生错误

[__NSCFConstantString setName:]: unrecognized selector sent to instance 0x10a6670d0

因此需要对name的getter和setter方法进行扩展,扩展方法为

static void * key = @"key";

- (void)setName:(NSString *)name{
//    self.name = name;//OC写法
    /*
参数说明:
    1.调用的对象self
    2.静态的C语言指针,保证set/get方法操作的是同一个对象
    3.赋予的值
    4.赋值的变量属性修饰符
    */
    objc_setAssociatedObject(self, key, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSString*)name{
//    return self.name;//OC写法

    return objc_getAssociatedObject(self, key);
}

当然这些知识初识runtime用法,更多信息后续补充。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 性能好 感觉性能很高不知道是不是添加的东西太少 水平可以拖拽 , 可是如果每个列表都很长 , 就不好拖了 Shif...
    南不图阅读 702评论 0 1
  • 没记性太太 没记性太太有点分心,准确地说,她对任何事情都不专心。 有一天,她遇见了可笑先生。 ——你好,没记性太太...
    雪山小狐阅读 377评论 0 0
  • 文/默读者 2015-5-5 一早读到淼漭君的这首诗,很惊喜——凝炼的主题,集中而又开阔的意象,简洁干净的语言,...
    雁心老师阅读 353评论 0 1
  • 42 小猴儿的娘死了。 高高的山坡上,四合院又一次高冷的呈现在众多人...
    心灵是我独舞的城池阅读 327评论 0 0