很早以前就听闻<JavaScriptCore/JavaScriptCore.h>
的大名了,只是没有正面接触过,有的也只是间接接触过,比如ReactNative
,它渲染界面的核心就是<JavaScriptCore/JavaScriptCore.h>
。但是今天就不得不和它有一次正面的接触了,公司要做一个功能,需要Native
和js
方法之间的互调,所以,本篇文章就说说如何实现。当然,本篇文章说的都是基础。
前面几篇基本介绍了runtime中的大部分功能,包括对类与对象、成员变量与属性、方法与消息、分类与协议的处理。runtime大部分的功能都是围绕这几点来实现的。
本章的内容并不算重点,主要针对前文中对Objective-C Runtime Reference内容遗漏的地方做些补充。当然这并不能包含所有的内容。runtime还有许多内容。
阅读全文Objective-C中的分类允许我们通过一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到。
Objective-C中的协议是普遍存在的接口定义方式,即在一个类中通过@protocol
定义接口,在另外类中实现接口,这种接口定义方式也成为“delegation”模式,@protocol
声明了可以被其他任何类实现的方法,协议仅仅是定义一个接口,而由其他的类去负责实现。
在本章中,我们来看看runtime对分类与协议的支持。
阅读全文理解Method Swizzling
是学习Runtime机制的一个很好的机会。Method Swizzling
是改变一个selector
的实际实现的技术。通过这一技术,我们可以在运行时通过修改类的分发表中selector
对应的函数,来修改方法的实现。
前面我们讨论了Runtime中对类和对象的处理,及对成员变量与属性的处理。这一章,我们就要开始讨论Runtime中最有意思的一部分:消息处理机制。我们将详细讨论消息的发送及消息的转发。不过在讨论消息之前,我们先来了解一下与方法相关的一些内容。
阅读全文在前面一篇文章中,我们介绍了Runtime中与类和对象相关的内容,从这章开始,我们将讨论类实现细节相关的内容,主要包括类中成员变量,属性,方法,协议与分类的实现。
本章的主要内容将聚集在Runtime对成员变量与属性的处理。在讨论之前,我们先介绍一个重要的概念:类型编码。
阅读全文Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时更具有灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等。
这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。对于Objective-C来说,这个运行时系统就像一个操作系统一样,让它所有的工作可以正常运行。这个运行时系统即Objc Runtime
。Objc Runtime
其实就是一个Runtime
库,它基本上是用C和汇编写的,这个库使得C语言有了面向对象的能力。
今天去面试,被问了一道AFNetworking2.0和3.0有什么区别,当时心想,这谁不知道啊,随口答到:2.0使用的NSURLConnection,3.0使用的是NSURLSession,人家又问NSURLSesstion和NSURLConnection有什么区别,瞬间傻眼了,支支吾吾只是说出了缓存策略的不同。亡羊补牢,为时未晚,这篇博客就讲解一下它们两者到底有什么区别。
阅读全文当你设计一个app的时候,可能会有这样的场景,你想动态的去响应一个事件。例如,在屏幕上的一个触摸事件可能在不同的对象中都发生,并且你不得不决定由哪一个对象来响应这个事件并且尝试去理解怎么样的一个对象接收了到这个事件。
当一个常见的用户事件发生的时候,UIKit会创建一个事件对象Event Object,该对象包含了事件处理所必须得一些信息。然后它会将事件对象置于激活的app事件队列。例如触摸事件,该触摸时事件对象是一系列触摸信息包装集。例如手势事件,该事件是一个动态的变量它取决于你使用了什么框架以及你感兴趣的手势事件类型。
阅读全文