![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Runtime
文章平均质量分 95
Ansel_m
阿里天猫
展开
-
runtime深入解析
1.前言 OC是一门动态性比较强的编程语言,允许很多操作推迟到程序运行时再进行, 而OC的动态性是由Runtime来支撑和实现的,Runtime是一套C语言的API,封装了很多动态性相关的函数,平时编写的OC代码,底层都是转换成了Runtime API进行调用。 2. 基础知识 2.1 Class 2.2 Meta Calss 2.3 Ivar 2.4 Property 2.5 Method 2.6 Category /关联 2.7 super 2.三个阶段 2.1.消息发送 2.2.动态方法解析 2原创 2022-03-28 21:45:09 · 1015 阅读 · 0 评论 -
iOS 底层解析weak的实现原理(包含weak对象的初始化,引用,释放的分析)
原文 很少有人知道weak表其实是一个hash(哈希)表,Key是所指对象的地址,Value是weak指针的地址数组。更多人的人只是知道weak是弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为nil。通常用于解决循环引用问题。但现在单知道这些已经不足以应对面试了,好多公司会问weak的原理。weak的原理是什么呢?下面就分析一下weak的工作原理(只是自己对这个问题转载 2017-06-17 13:09:10 · 396 阅读 · 0 评论 -
ARC下dealloc过程及.cxx_destruct的探究
我是前言 这次探索源自于自己一直以来对ARC的一个疑问,在MRC时代,经常写下面的代码: - (void)dealloc { self.array = nil; self.string = nil; // ... // // 非Objc对象内存的释放,如CFRelease(...) // ... // [super deall转载 2017-06-17 15:32:17 · 490 阅读 · 0 评论 -
iOS中的SEl和IMP到底是什么
SEL : 类成员方法的指针,但不同于C语言中的函数指针,函数指针直接保存了方法的地址,但SEL只是方法编号。 IMP:一个函数指针,保存了方法的地址 IMP和SEL关系 每一个继承于NSObject的类都能自动获得runtime的支持。在这样的一个类中,有一个isa指针,指向该类定义的数据结构体,这个结构体是由编译器编译时为类(需继承于NSObject)创建的.在这个结构体转载 2017-06-14 14:51:39 · 369 阅读 · 0 评论 -
为什么 objc_msgSend 必须用汇编实现
原文链接:http://tutuge.me/2016/06/19/translation-why-objcmsgsend-must-be-written-in-assembly/ 译者前言 总是看到有人说用汇编实现objc_msgSend是为了速度快,当然这个不可否认。但是难道没有别的原因?于是就看到了这篇文章,遂翻译之!=。= 我自己的理解就是,用汇编实现,是为了应对不同的“Calli转载 2017-08-21 18:00:00 · 275 阅读 · 0 评论 -
iOS管理对象内存的数据结构以及操作算法--SideTables、RefcountMap、weak_table_t-一
第一次写文章语言表达能力太差。如果有哪里表达的不够清晰可以直接评论回复我,我来加以修改。这篇文章力求脱离语言的特性,咱们多讲结构和算法。即使你不懂iOS开发,不懂Objective-C语言也可以看这篇文章。 通过阅读本文你可以了解iOS管理对象内存的数据结构是什么样的,以及操作逻辑。对象的reatin、release、dealloc操作是该通过怎样的算法实现的,weak指针是如何自动变n转载 2017-08-22 20:34:33 · 597 阅读 · 0 评论 -
iOS管理对象内存的数据结构以及操作算法--SideTables、RefcountMap、weak_table_t-二
这篇文章是之前那篇文章iOS管理对象内存的数据结构以及操作算法--SideTables、RefcountMap、weak_table_t的补充和延伸。如果没有阅读过前一篇文章请先看那一篇。 上一篇文章中关于SideTables、SideTable和RefcountMap三者关系可能描述的不太清楚。很多朋友表示看起来晕乎乎的。当初我在研究的时候也是蒙圈了好长一段时间。所以特意写了这篇文章来转载 2017-08-22 20:35:15 · 675 阅读 · 0 评论 -
你真的了解load方法么?
因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Mac OS,也就是 x86_64 架构下运行的,对于在 arm64 中运行的代码会特别说明。 写在前面 文章的标题与其说是问各位读者,不如说是问笔者自己:我真的了解 + load 方法么? + load 作为 Objective-C 中的一个方法,与其它方法有很大的不同。它只是一个在整转载 2017-09-18 22:44:32 · 536 阅读 · 0 评论 -
神经病院 Objective-C Runtime 入院第一天—— isa 和 Class
目录1.Runtime简介2.NSObject起源(1) isa_t结构体的具体实现(2) cache_t的具体实现(3) class_data_bits_t的具体实现3.入院考试一. Runtime简介Runtime 又叫运行时,是一套底层的 C 语言 API,是 iOS 系统的核心之一。开发者在编码过程中,可以给任意一个对象发送消息,在编译阶段只是确定了要向接收者发送这条消息,而接受者将要如何...转载 2018-06-13 17:15:09 · 332 阅读 · 0 评论 -
Objective-C学习笔记之获取私有变量的值
内容。 1、下面是自己定义的一个类,里面有一个私有变量mt_,并且在初始化值为"Ha Ha Ha"。 @interface Mobj : NSObject { @private NSString *mt_; } @end @implementation Mobj - (id)init { self = [super init]; if (self)转载 2015-07-23 09:02:31 · 1513 阅读 · 1 评论 -
JSPatch
JSPatch JSPatch bridge Objective-C and JavaScript using the Objective-C runtime. You can call any Objective-C class and method in JavaScript by just including a small engine. That makes the A转载 2015-06-01 14:22:03 · 5213 阅读 · 0 评论 -
第12条:理解消息转发机制(1)
《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》第2章对象、消息、运行期,本章讲解运行期环境中各个部分协同工作的原理之后,你的开发水平将会进一步提升。本节为大家介绍消息转发机制。 第12条:理解消息转发机制(1) 第11条讲解了对象的消息传递机制,并强调了其重要性。第12条则要讲解另外一个重要的问题,就是对象在收到无法解转载 2014-08-09 09:28:03 · 773 阅读 · 0 评论 -
第13条:用“方法调配技术”调试“黑盒方法”
《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》第2章对象、消息、运行期,本章讲解运行期环境中各个部分协同工作的原理之后,你的开发水平将会进一步提升。本节为大家介绍用“方法调配技术”调试“黑盒方法”。 第13条:用“方法调配技术”调试“黑盒方法” 第11条中解释过:Objective-C对象收到消息之后,究竟会调用何种方转载 2014-08-09 09:30:34 · 980 阅读 · 0 评论 -
第12条:理解消息转发机制(3)
《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》第2章对象、消息、运行期,本章讲解运行期环境中各个部分协同工作的原理之后,你的开发水平将会进一步提升。本节为大家介绍消息转发机制。 第12条:理解消息转发机制(3) 本例的关键在于resolveInstanceMethod:方法的实现代码: + (BOOL)resolveI转载 2014-08-09 09:29:37 · 1071 阅读 · 0 评论 -
第14条:理解“类对象”的用意
《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》第2章对象、消息、运行期,本章讲解运行期环境中各个部分协同工作的原理之后,你的开发水平将会进一步提升。本节为大家介绍“类对象”的用意。 第14条:理解“类对象”的用意 Objective-C实际上是一门极其动态的语言。第11条讲解了运行期系统如何查找并调用某方法的实现代码,转载 2014-08-09 09:31:19 · 896 阅读 · 0 评论 -
第12条:理解消息转发机制(2)
《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》第2章对象、消息、运行期,本章讲解运行期环境中各个部分协同工作的原理之后,你的开发水平将会进一步提升。本节为大家介绍消息转发机制。 第12条:理解消息转发机制(2) 完整的消息转发 如果转发算法已经来到这一步的话,那么唯一能做的就是启用完整的消息转发机制了。首先创建NSInv转载 2014-08-09 09:28:48 · 1059 阅读 · 0 评论 -
Runtime(一)
一些公用类: @interface CustomClass : NSObject - (void) fun1; @end @implementation CustomClass - (void) fun1 { NSLog(@"fun1"); } @end @interface TestClass :转载 2014-08-09 10:02:21 · 816 阅读 · 0 评论 -
Runtime(三)
11、系统类的方法实现部分替换 - (void) methodExchange { Method m1 = class_getInstanceMethod([NSStringclass],@selector(lowercaseString)); Method m2 = class_getInstanceMethod([NSStringclass],@sel转载 2014-08-09 11:16:12 · 671 阅读 · 0 评论 -
Runtime(二)
一些公用类: @interface ClassCustomClass :NSObject{ NSString *varTest1; NSString *varTest2; NSString *varTest3; } @property (nonatomic,assign)NSString *varTest1; @prop转载 2014-08-09 11:11:59 · 694 阅读 · 0 评论 -
Runtime(四)
用C代替OC: #import #import #import extern int UIApplicationMain (int argc,char *argv[],void *principalClassName,void *delegateClassName); struct Rect {转载 2014-08-09 11:20:12 · 769 阅读 · 0 评论 -
Runtime-动态创建类添加属性和方法
- (void)createClass { Class MyClass = objc_allocateClassPair([NSObject class], "myclass", 0); //添加一个NSString的变量,第四个参数是对其方式,第五个参数是参数类型 if (class_addIvar(MyClass, "itest", sizeof转载 2014-08-12 09:32:51 · 12048 阅读 · 0 评论 -
ios动态创建类Class
【Objective-C Runtime动态加载】---动态创建类Class 动态创建类Class,动态添加Class成员变量与成员函数,动态变量赋值与取值,动态函数调用等方法 a.使用objc_allocateClassPair创建一个类Class const char * className = "Calculator"; Class kclass = objc_g转载 2014-08-12 08:57:56 · 12258 阅读 · 0 评论 -
objc runtime 动态增加属性
objective-c中,有类别可以在不修改源码的基础上增加方法;近排在看别人的开源代码时,发现还可以动态增加属性。而且是在运行时,太牛B了。 使用运行时库,必须要先引入 objc/runtime.h 可以使用的函数如下: OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value,转载 2014-08-01 11:28:02 · 2178 阅读 · 0 评论