Runtime
文章平均质量分 95
Ansel_m
阿里天猫
展开
-
runtime深入解析
1.前言OC是一门动态性比较强的编程语言,允许很多操作推迟到程序运行时再进行, 而OC的动态性是由Runtime来支撑和实现的,Runtime是一套C语言的API,封装了很多动态性相关的函数,平时编写的OC代码,底层都是转换成了Runtime API进行调用。2. 基础知识2.1 Class2.2 Meta Calss2.3 Ivar2.4 Property2.5 Method2.6 Category /关联2.7 super2.三个阶段2.1.消息发送2.2.动态方法解析2原创 2022-03-28 21:45:09 · 1059 阅读 · 0 评论 -
iOS 底层解析weak的实现原理(包含weak对象的初始化,引用,释放的分析)
原文很少有人知道weak表其实是一个hash(哈希)表,Key是所指对象的地址,Value是weak指针的地址数组。更多人的人只是知道weak是弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为nil。通常用于解决循环引用问题。但现在单知道这些已经不足以应对面试了,好多公司会问weak的原理。weak的原理是什么呢?下面就分析一下weak的工作原理(只是自己对这个问题转载 2017-06-17 13:09:10 · 437 阅读 · 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 · 513 阅读 · 0 评论 -
iOS中的SEl和IMP到底是什么
SEL : 类成员方法的指针,但不同于C语言中的函数指针,函数指针直接保存了方法的地址,但SEL只是方法编号。IMP:一个函数指针,保存了方法的地址IMP和SEL关系每一个继承于NSObject的类都能自动获得runtime的支持。在这样的一个类中,有一个isa指针,指向该类定义的数据结构体,这个结构体是由编译器编译时为类(需继承于NSObject)创建的.在这个结构体转载 2017-06-14 14:51:39 · 384 阅读 · 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 · 292 阅读 · 0 评论 -
iOS管理对象内存的数据结构以及操作算法--SideTables、RefcountMap、weak_table_t-一
第一次写文章语言表达能力太差。如果有哪里表达的不够清晰可以直接评论回复我,我来加以修改。这篇文章力求脱离语言的特性,咱们多讲结构和算法。即使你不懂iOS开发,不懂Objective-C语言也可以看这篇文章。 通过阅读本文你可以了解iOS管理对象内存的数据结构是什么样的,以及操作逻辑。对象的reatin、release、dealloc操作是该通过怎样的算法实现的,weak指针是如何自动变n转载 2017-08-22 20:34:33 · 615 阅读 · 0 评论 -
iOS管理对象内存的数据结构以及操作算法--SideTables、RefcountMap、weak_table_t-二
这篇文章是之前那篇文章iOS管理对象内存的数据结构以及操作算法--SideTables、RefcountMap、weak_table_t的补充和延伸。如果没有阅读过前一篇文章请先看那一篇。 上一篇文章中关于SideTables、SideTable和RefcountMap三者关系可能描述的不太清楚。很多朋友表示看起来晕乎乎的。当初我在研究的时候也是蒙圈了好长一段时间。所以特意写了这篇文章来转载 2017-08-22 20:35:15 · 695 阅读 · 0 评论 -
你真的了解load方法么?
因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Mac OS,也就是 x86_64 架构下运行的,对于在 arm64 中运行的代码会特别说明。写在前面文章的标题与其说是问各位读者,不如说是问笔者自己:我真的了解 + load 方法么?+ load 作为 Objective-C 中的一个方法,与其它方法有很大的不同。它只是一个在整转载 2017-09-18 22:44:32 · 554 阅读 · 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 · 353 阅读 · 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 · 1532 阅读 · 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 · 5226 阅读 · 0 评论 -
第12条:理解消息转发机制(1)
《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》第2章对象、消息、运行期,本章讲解运行期环境中各个部分协同工作的原理之后,你的开发水平将会进一步提升。本节为大家介绍消息转发机制。第12条:理解消息转发机制(1)第11条讲解了对象的消息传递机制,并强调了其重要性。第12条则要讲解另外一个重要的问题,就是对象在收到无法解转载 2014-08-09 09:28:03 · 788 阅读 · 0 评论 -
第13条:用“方法调配技术”调试“黑盒方法”
《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》第2章对象、消息、运行期,本章讲解运行期环境中各个部分协同工作的原理之后,你的开发水平将会进一步提升。本节为大家介绍用“方法调配技术”调试“黑盒方法”。第13条:用“方法调配技术”调试“黑盒方法”第11条中解释过:Objective-C对象收到消息之后,究竟会调用何种方转载 2014-08-09 09:30:34 · 996 阅读 · 0 评论 -
第12条:理解消息转发机制(3)
《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》第2章对象、消息、运行期,本章讲解运行期环境中各个部分协同工作的原理之后,你的开发水平将会进一步提升。本节为大家介绍消息转发机制。第12条:理解消息转发机制(3)本例的关键在于resolveInstanceMethod:方法的实现代码: + (BOOL)resolveI转载 2014-08-09 09:29:37 · 1099 阅读 · 0 评论 -
第14条:理解“类对象”的用意
《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》第2章对象、消息、运行期,本章讲解运行期环境中各个部分协同工作的原理之后,你的开发水平将会进一步提升。本节为大家介绍“类对象”的用意。第14条:理解“类对象”的用意Objective-C实际上是一门极其动态的语言。第11条讲解了运行期系统如何查找并调用某方法的实现代码,转载 2014-08-09 09:31:19 · 912 阅读 · 0 评论 -
第12条:理解消息转发机制(2)
《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》第2章对象、消息、运行期,本章讲解运行期环境中各个部分协同工作的原理之后,你的开发水平将会进一步提升。本节为大家介绍消息转发机制。第12条:理解消息转发机制(2)完整的消息转发如果转发算法已经来到这一步的话,那么唯一能做的就是启用完整的消息转发机制了。首先创建NSInv转载 2014-08-09 09:28:48 · 1073 阅读 · 0 评论 -
Runtime(一)
一些公用类:@interface CustomClass : NSObject- (void) fun1;@end@implementation CustomClass- (void) fun1{ NSLog(@"fun1");}@end@interface TestClass :转载 2014-08-09 10:02:21 · 827 阅读 · 0 评论 -
Runtime(三)
11、系统类的方法实现部分替换- (void) methodExchange { Method m1 = class_getInstanceMethod([NSStringclass],@selector(lowercaseString)); Method m2 = class_getInstanceMethod([NSStringclass],@sel转载 2014-08-09 11:16:12 · 686 阅读 · 0 评论 -
Runtime(二)
一些公用类:@interface ClassCustomClass :NSObject{ NSString *varTest1; NSString *varTest2; NSString *varTest3;}@property (nonatomic,assign)NSString *varTest1;@prop转载 2014-08-09 11:11:59 · 705 阅读 · 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 · 783 阅读 · 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 · 12097 阅读 · 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 · 12281 阅读 · 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 · 2188 阅读 · 0 评论