ObjC之RunTime(上)】的更多相关文章

转载自这里. 最近看了一本书——iOS6 programming Pushing the Limits(亚马逊有中文版),最后一章是关于Deep ObjC的,主要内容是ObjC的runtime.虽然之前看过runtime的programming guide,但读之乏味也不知道能用在何处.现在有点小小的理解,觉得别有乾坤,索性把runtime的相关东西给整理一下. 下面就从官方文档开始,看看runtime有哪些特性,以及各自的应用场合. 基本概念 对于现在绝大多数的64位操作系统而言,我们接触到的…
之前通过学习官方文档对runtime有了初步的认识,接下来就要研究学习runtime到底能用在哪些地方,能如何改进我们的程序. 本文也可以从icocoa浏览. Swizzling Swizzling可以分为method swizzling和class(isa)swizzling两种.顾名思义就是将方法/类在运行时替换掉. Method Swizzling 在运行时替换/修改某个方法——可以是自己写的方法也可以是系统的方法——当然一般是用于替换框架类中的方法. //ZJView.m -Swizzl…
昨天遇到一个仅仅有一行错误信息的问题: -[NSNull objectForKey:]: unrecognized selector sent to instance 0x537e068 因为这个问题发生在次线程.所以没有太实用的堆栈信息.而是仅仅有简单的SIGABRT信息: 考虑到unrecognized selector sent to instance这类问题是因为向某个对象发送了未实现的消息,这个过程大致例如以下(图片摘自这里): watermark/2/text/aHR0cDovL2J…
objC语言不仅仅有着面向对象的特点(封装,继承和多态),也拥有类似脚本语言的灵活(运行时),这让objC有着很多奇特的功能-可在运行时添加给类或对象添加方法,甚至可以添加类方法,甚至可以动态创建类... [TOC] 运行时 runtime,即运行时,这里不详述其概念,我们可以类比java和javascript语言,它们也都有运行时环境.java运行时是和编译阶段相独立的过程,可以理解java字节码在虚拟机中解释执行的阶段的由虚拟机提供的相关引用(gc,存储等)的环境:而js运行时则更为特殊,由…
Mike_zh QQ:82643885 end: blogTitle 博客的标题和副标题 博客园 首页 新随笔 联系 订阅 <a id="MyLinks1_XMLLink" class="aHeaderXML" href="http://www.cnblogs.com/Mike-zh/rss"><img src="http://www.cnblogs.com/images/xml.gif" alt="…
一.Runtime简介 因为Objective-C是一门动态语言,所以它总是想办法把一些决定性工作从编译链接推迟到运行时,也就是说只有编译器是不够的,还需要一个运行时系统(runtime system)来执行编译后的代码.这就是Objective-C Runtime系统存在的意义,它是整个Objective-C运行框架的一块基石. Runtime其实有两个版本:modern和legacy.我们现在用的Objective-C 2.0采用的是modern版的Runtime系统,只能运行在iOS 2.…
苹果的KVO原理通过isa-swizzling技术实现,本质实现逻辑是在runtime时添加一个子类,重写set方法进行操作,现在我们也基于runtime来实现一个KVO. 首先新建一个Person类,继承自NSObject,添加一个name属性. 然后给NSObject添加一个分类KVO,在分类中实现KVO的注册方法EZ_addObserver:forKeyPath: options:context:,这个方法的作用和系统的注册方法一样.先为Person动态添加一个子类EZKVO_Person…
文章有点长,写的过程很有收获,但读的过程不一定有收获,慎入 [摘要]   悬垂指针(dangling pointer)引起的crash问题,是我们在iOS开发过程当中经常会遇到的.其中由delegate引发的此类问题更是常见.本文由一个UIActionSheet引发的delegate悬垂指针问题开始,逐步思索和尝试解决这类问题的几种方案并进行比较.   [正文]   UIActionSheet是一个常用的iOS系统控件,用法很简单,实现UIActionDelegate协议方法,然后通过showI…
首先,我们都知道NSObject是大多数类的根类,但是,这个类的是怎么实现的呢?我们可以去下载开源的Runtime源码,探究下NSObject类的实现. 1. NSObject.h文件 我们可以直接使用Command点NSOject进去看到它的头文件,可以看到,NSObject.h文件中有两块内容: NSObject 协议 NSObject 实现 1.1 NSObject 协议 @protocol NSObject - (BOOL)isEqual:(id)object; @property (r…
本文目录 1.Runtime简介 2.Runtime相关的头文件 3.技术点和应用场景 3_1.获取属性\成员变量列表 3_2.交换方法实现 3_3.类\对象的关联对象,假属性 3_4.动态添加方法,拦截未实现的方法 3_5.动态创建一个类 4.面试题 -1.Runtime简介 1.Runtime简介 因为Objc是一门动态语言,所以它总是想办法把一些决定工作从编译连接推迟到运行时.也就是说只有编译器是不够的,还需要一个运行时系统 (runtime system) 来执行编译后的代码.这就是 O…