runtime
bravegogo
知行合一,积学养气
展开
-
Objective-C Runtime 运行时之一:类与对象
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等。这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。对于Objective-C来说,这个运行时系统就像一个操作系统一样:它让所有的工作转载 2016-03-24 23:18:22 · 470 阅读 · 0 评论 -
_objc_msgForward_demo用来测试消息转发机制
_objc_msgForward_demo用来测试消息转发机制对象查找selector时,先查找cachelist,如果没有则查找methodlist,如果还没有就查找父类的methodlist都没有是还有三次机会可以处理这次selector访问1. + (BOOL)resolveInstanceMethod:(SEL)sel; 在此方法中添加相应selecto转载 2017-03-06 14:58:37 · 1488 阅读 · 0 评论 -
objc_msgForward_demo
demo:https://github.com/yemingyu/_objc_msgForward_demo_objc_msgForward_demo用来测试消息转发机制对象查找selector时,先查找cachelist,如果没有则查找methodlist,如果还没有就查找父类的methodlist都没有是还有三次机会可以处理这次selector访问转载 2017-03-03 11:28:34 · 448 阅读 · 0 评论 -
msg_forward_example demo
https://github.com/yemingyu/_objc_msgForward_demo_objc_msgForward_demo用来测试消息转发机制对象查找selector时,先查找cachelist,如果没有则查找methodlist,如果还没有就查找父类的methodlist都没有是还有三次机会可以处理这次selector访问转载 2017-03-03 11:23:06 · 317 阅读 · 0 评论 -
objc_msgSend arm64 崩溃问题
转载自: http://iloss.me/post/kai-fa/2014-12-09-objc_msgsend之前一直用objc_msgSend,但是没注意apple的文档提示,所以突然objc_msgSend crash了。之前32位的时候没问题,然后转换为64位之后就会发生EXC_BAD_ACCESS问题。当然apple再文档(64-Bit Transiti转载 2017-02-19 10:23:27 · 449 阅读 · 0 评论 -
【iOS程序启动与运转】- RunLoop个人小结
学习iOS开发一般都是从UI开始的,从只知道从IB拖控件,到知道怎么在方法里写代码,然后会显示什么样的视图,产生什么样的事件,等等。其实程序从启动开始,一直都是按照苹果封装好的代码运行着,暴露的一些属性和方法作为接口,是让我们在给定的方法里写代码实现自定义功能,做出各种各样的应用。这些方法的调用顺序最为关键,熟悉了程序运转和方法调用的顺序,才可以更好地操控程序和代码,尽量避免Xcode不报错又实现转载 2016-05-19 11:18:52 · 739 阅读 · 0 评论 -
NSSetUncaughtExceptionHandler
1,首先在delegate文件里面- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions函数里面添加:NSSetUncaughtExceptionHandler (&Uncaught原创 2016-04-21 11:39:15 · 501 阅读 · 0 评论 -
Objective-C消息机制的原理
http://dangpu.sinaapp.com/?p=119 在Objective-C中,message与方法的真正实现是在执行阶段绑定的,而非编译阶段。编译器会将消息发送转换成对objc_msgSend方法的调用。 objc_msgSend方法含两个必要参数:receiver、方法名(即:selector),如: [receiver message]; 将转载 2016-04-21 11:12:32 · 337 阅读 · 0 评论 -
Objective-C中一种消息处理方法performSelector: withObject:
Objective-C中调用函数的方法是“消息传递”,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候传递人和消息。 首先介绍两个方法 SEL和@selector根据AppleObjective-C Runtime Reference官方文档这个传递消息的函数就转载 2016-04-21 11:01:20 · 344 阅读 · 0 评论 -
详解objc_msgSend
【详解objc_msgSend】 1、为了性能,objc_msgSend用汇编写成。存在于objc-msg-x86_64.s中。 2、在上图代码中可以看到,objc_msgSend被分为2个过程:1)在cache中寻找SEL。2)在MethodTable寻找SEL。 3、CacheLookup中,不断地拿SEL与cache中的缓存比较,比较失败,则跳转到 LCacheMiss标转载 2016-04-21 10:57:18 · 1843 阅读 · 0 评论 -
iOS关于RunLoop和Timer
RunLoop这个东西,其实我们一直在用,但一直没有很好地理解它,或者甚至没有知道它的存在。RunLoop可以说是每个线程都有的一个对象,是用来接受事件和分配任务的loop。永远不要手动创建一个runloop,它是跟随着每个线程的。一个RunLoop接收两种source的事件:input source和timer source。同时必须知道的是,input source,runloop是异步交付的转载 2016-04-17 13:30:52 · 385 阅读 · 0 评论 -
IMP
可能大家一直看到有许多朋友在Runtime相关文章中介绍IMP指针的概念,那么IMP究竟有什么实际作用呢?让我们先从一个函数看起来。Method Swizzling如果对Runtime有一定了解的话,一定听说过或者用过这个函数:1void method_exchangeImplementations(Method m1, Me转载 2016-04-27 15:55:09 · 429 阅读 · 0 评论 -
深入理解Objective-C的Runtime机制
摘要:Objective-C是基于C加入了面向对象特性和消息转发机制的动态语言,除编译器之外,还需用Runtime系统来动态创建类和对象,进行消息发送和转发。本文作者通过分析Apple开源的Runtime代码来深入理解OC的Runtime机制。这时首先会构造出objc_super结构体,这个结构体第一个成员是self,第二个成员是(id)class_getSuperclas转载 2016-04-27 12:41:23 · 416 阅读 · 0 评论 -
Objective C的runtime
前言: Objective C的runtime技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表、属性列表、变量列表,修改方法、属性,增加方法,属性等等,本文对相关的几个要点做了一个小结。目录:(1)使用class_replaceMethod/class_addMethod函数在运行时对函数进行动态替换或增加新函数(2)重载f转载 2016-04-27 12:39:36 · 198 阅读 · 0 评论 -
Objective-C @encode关键字
如果把一些数(int ,BOOL类型等)封装到NSNumber对象中,而这些NSNumber类型的数据又再放到一个字典当中,循环字典元素,取出每一个NSNumber类型的对象,如何才能够知道NSNumber对象中放的是什么类型的数(int ,BOOL类型等)?因为之前了解过,NSNumber是工厂方法设计模式使用的典范(NSNumber类是抽象父类,每一种数类型肯定会包含一个具转载 2016-04-10 09:54:42 · 290 阅读 · 0 评论 -
IOS NSInvocation应用与理解
IOS中有一个类型是SEL,它的作用很相似与函数指针,通过performSelector:withObject:函数可以直接调用这个消息。但是perform相关的这些函数,有一个局限性,其参数数量不能超过2个,否则要做很麻烦的处理,与之相对,NSInvocation也是一种消息调用的方法,并且它的参数没有限制。这两种直接调用对象消息的方法,在IOS4.0之后,大多被block结构所取代,只有在很老转载 2016-04-10 09:49:19 · 431 阅读 · 0 评论 -
函数调用
Objective-C是一门动态语言,一个函数是由一个selector(SEL),和一个implement(IML)组成的。Selector相当于门牌号,而Implement才是真正的住户(函数实现)。和现实生活一样,门牌可以随便发(@selector(XXX)),但是不一定都找得到住户,如果找不到系统会给程序几次机会来程序正常运行,实在没出路了才会抛出异常。下图是objc_msgSend转载 2016-04-10 09:18:25 · 268 阅读 · 0 评论 -
Objective-C method及相关方法分析
## Objective-C method及相关方法分析转载请注名出处 [http://blog.csdn.net/uxyheaven](http://blog.csdn.net/uxyheaven/article/details/38120335)本篇文章将探究一下objc里的关于方法的函数是如何实现的首先看下方法的定义, Method 是一个objc_method结构体转载 2016-04-09 23:02:52 · 883 阅读 · 0 评论 -
iOS NSMachPort 线程与进程间的通信
原创:http://blog.csdn.net/yxh265/article/details/51483822iOS线程间的通信iOS中,两个线程之间要想互相通信,可以使用:NSMachPort 下面是例子#define kMsg1 100#define kMsg2 101- (void)viewDidLoad { [super viewDidLoad]; ...转载 2018-07-25 11:20:22 · 2050 阅读 · 0 评论