Objective-C:运行时runtime

1.是否可以把比较耗时的操作放在通知中心中?

通知在哪一个线程发的,那么对通知事件的处理就在同一个线程中进行;

如果在异步线程发的通知,那么可以执行比较耗时的操作;

如果在主线程发的通知,那么就不可以执行比较耗时的操作。

2.Foundation对象和CoreFoundation对象有什么区别?

Foundation对象时OC的;

CoreFoundation对象是C的;

Foundation对象和CoreFoundation对象是可以互相转换的,数据类型之间的转换

·ARC : __bridge_retained、__bridge_transfer、CFBridgingRetain、CFBridgingRelease

·非ARC : __bridge

3.什么是runtime?

1> runtime是一套底层的C语言API(包含很多强大实用的C语言数据类型、C语言函数)

2> 实际上,平时我们编写的OC代码,底层都是基于runtime实现的

* 也就是说,平时我们编写的OC代码,最终都是转成了底层的runtime代码(C语言代码)

runtime有啥用?

1> 能动态产生一个类、一个成员变量、一个方法

2> 能动态修改一个类、一个成员变量、一个方法

3> 能动态删除一个类、一个成员变量、一个方法

常见的函数、头文件

#import <objc/runtime.h> : 成员变量、类、方法

Ivar * class_copyIvarList : 获得某个类内部的所有成员变量

Method * class_copyMethodList : 获得某个类内部的所有方法

Method class_getInstanceMethod : 获得某个实例方法(对象方法,减号-开头)

Method class_getClassMethod : 获得某个类方法(加号+开头)

method_exchangeImplementations : 交换2个方法的具体实现

#import <objc/message.h> : 消息机制

objc_msgSend(….)

什么是iOS Swizzle? 利用运行时函数交换2个方法的实现

时间: 2024-10-13 20:56:37

Objective-C:运行时runtime的相关文章

Objective C运行时(runtime)

#import <objc/runtime.h> void setBeingRemoved(id __self, SEL _cmd) { NSLog(@"------------UNSELECT BY INVOKE."); } // Then these two lines: Class __class = NSClassFromString(@"WebActionDisablingCALayerDelegate"); class_addMethod(_

iOS 运行时(runtime)浅析

本博客,直接从分类说起.都知道OC中的分类是不能直接添加属性的,意思间接是能添加属性的.那应该怎么添加呢?那就要用到运行时(runtime)机制. 一,运行时金典用法之一 现在,给HGPerson类增加一个分类:HGPerson+HG.h,给一个属性如下: @property (nonatomic, copy) NSString* name; 貌似,这样写了以后,是能调用的,但是运行就报错了. -[HGPerson setName:]: unrecognized selector sent to

Objective C运行时(runtime)技术总结

Objective C的runtime技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表.属性列表.变量列表,修改方法.属性,增加方法,属性等等,本文对相关的几个要点做了一个小结. (1)在运行时对函数进行动态替换 : class_replaceMethod 使用该函数可以在运行时动态替换某个类的函数实现,这样做有什么用呢?最起码,可以实现类似windows上hook效果,即截获系统类的某个实例函数,然后塞一些自己的东西进去,比如打个log什么的. 示例代码: IMP org

Objective C运行时(runtime)技术总结,好强大的runtime

前言:          Objective C的runtime技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表.属性列表.变量列表,修改方法.属性,增加方法,属性等等,本文对相关的几个要点做了一个小结. 目录: (1)使用class_replaceMethod/class_addMethod函数在运行时对函数进行动态替换或增加新函数 (2)重载forwardingTargetForSelector,将无法处理的selector转发给其他对象 (3)重载resolveIns

iOS动态性 运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)

借助前辈的力量综合一下资料. OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法.利用runtime机制让我们可以在程序运行时动态修改类.对象中的所有属性.方法,就算是私有方法以及私有属性都是可以动态修改的.本文旨在对runtime的部分特性小试牛刀,更多更全的方法可以参考系统API文件<objc/runtime.h>,demo例子可以参见CSDN的runtime高级编程系列文章. 我们出发吧! 先看一个非常平常的Father类: #import <Fou

【iOS开发-97】MediaPlayer框架中MPMoviePlayerController类视频播放的使用,运行时runtime

(1)使用媒体播放,需要先加载<MediaPlayer/MediaPlayer.h>框架,并#import导入.媒体播放需要注意的几个点在于: --全屏的设置需要在视图可见后设置才有效. --各种控制主要是通过通知NSnotificationCenter来实现的,有进入/退出全屏,播放暂停状态改变等等. #import "WPMoviePlayController.h" #import <MediaPlayer/MediaPlayer.h> @interface

iOS运行时Runtime浅析

运行时是iOS中一个很重要的概念,iOS运行过程中都会被转化为runtime的C代码执行.例如[target doSomething];会被转化成objc)msgSend(target,@selector(doSomething))来执行.这篇博客会较为全面的来讲解下Runtime. OC是一门动态语言,它将很多静态语言在编译和链接时做的事放到了运行时来处理.这种动态语言的优势在于:写代码能更加灵活,可以把消息转发给想要的对象,或者随意交换一个方法的实现. OC Runtime目前有两个版本:M

iOS 运行时RunTime使用场景一:打点统计用户行为,深度解耦

转自:http://www.jianshu.com/p/0497afdad36d 用户统计.jpeg 用户行为统计(User Behavior Statistics, UBS)一直是移动互联网产品中必不可少的环节,也俗称埋点.在保证移动端流量不会受较大影响的前提下,PM们总是希望埋点覆盖面越广越好.目前常规的做法是将埋点代码封装成工具类,但凡工程中需要埋点(如点击事件.页面跳转)的地方都插入埋点代码.一旦项目越来越复杂,你会发现埋点的代码散落在程序的各个角落,不利于维护以及复用.本文旨在探讨利用

iOS运行时 runtime

1.运行时介绍 1. 什么是运行时 运行时机制是用 C++开发的,是一套苹果开源的框架 OC 是基于运行时开发的语言,在OC中所有的类都是运行的时候才加载. 2. OC语言 OC 是一个全动态语言,OC的一切都是基于 Runtime实现的 只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法 3. 使用场景 1. 运行时动态获取类的属性 //主要应用:字典转模型框架 MJExtension,JSONModel 2.利用关联对象为分类添加属性 3.利用交换方法拦截系统或其他框架的方法

在Linux安装ASP.Net Core的运行时(Runtime)

在部署的时候,如果您不想在您的Linux服务器上安装.Net Core SDK,您可以只安装Runtime,接下来我们看看该如何安装运行时Runtime. 下载运行时文件 下载页面:https://www.microsoft.com/net/download/linux 先获取一下对应的下载链接,可以使用浏览器点击链接来获取具体文件的下载链接 获取完链接以后,就可以使用命令下获取和安装了 以Centos 7,Ubuntu 16.04为例安装ASP.Net Core 2.0.5的运行时: wget