内存管理
文章平均质量分 72
Hepburn_
这个作者很懒,什么都没留下…
展开
-
runtime-02-Swizzle
上一篇我们讲过runtime中可以交换两个方法的具体实现;利用swizzie就可以实现;什么意思呢?废话不多说,直接上代码。呢,废话不多说,直接上代码。在开发中,图片会提供IOS7版本的,IOS8版本的,但是我们不可能每加载一个图片就去判断是不是IOS7版本还是IOS8版本,这样,我们就可以写一个UIImage类的扩展,使得我们直接调用一个方法,不管是什么IOS7还是IOS8让方法去判断,原创 2015-07-22 23:10:38 · 898 阅读 · 1 评论 -
runtime-01
Runtime实现的机制:运行时机制它是一套C语言库;实际上我们编写的所有OC代码,最终都是转成了runtime库的东西,比如类转成了runtime库里的结构体等数据类型,方法转成了runtime库里面的C语言函数,平时调方法都是转成了objc_msgSend函数(所以说OC有个消息发送机制);因此,可以说runtime是OC的底层实现,是OC的幕后执行者;举例:runtime原创 2015-07-22 22:24:08 · 897 阅读 · 0 评论 -
IOS笔记-protocol、category和继承
利用继承,多态是一个很好的保持“对扩展开放,对更改封闭”(OCP)的办法,也是最常见的一种方法。OC中还有另外两种语法来支持OCP:protocol和category。Protocol只能定义一套接口,而不能提供实现。Category可以为类提供额外的接口和实现。那么三者到底在使用上有什么本质的区别呢?在我看来,protocol的作用是为一些列类仅仅提供一套公用的接口,而完全没有办法也没有可能原创 2015-07-22 11:33:58 · 1317 阅读 · 0 评论 -
OC中Autorelease Pool实现原理与autorelease何时被释放
autorelease 基本用法1,对象执行autorelease方法时会将对象添加到自动释放池中2,当自动释放池销毁时自动释放池中所有对象作release操作3,对象执行autorelease方法后自身引用计数器不会改变,而且会返回对象本身autoreleased 对象什么时候释放autorelease 本质上就是延迟调用 release ,那 autoreleased原创 2015-07-23 10:39:53 · 4727 阅读 · 0 评论 -
类别与类扩展//类别与继承
类别1,在不需要继承的情况下可以扩展类的功能;2,无法向类中添加新的实例变量,类别没有位置容纳实例变量;(注意)如果非要在类别中加成员变量,可以使用@dynamic来弥补这种不足;3,名称冲突:当类别中的方法与原始类方法名称冲突,类别具有更高的优先级。(补充:在苹果官方文档中的描述是,当方法名重名的时候,在运行的时候不知道会调用哪个方法。实际上,这个应该是有规则可循的。我建原创 2015-07-22 10:56:01 · 1524 阅读 · 0 评论 -
ARC与MRC
Objective-c中提供了两种内存管理机制MRC(MannulReferenceCounting)和ARC(Automatic ReferenceCounting),分别提供对内存的手动和自动管理,来满足不同的需求。注意的是Xcode4.1及其以前版本没有ARC,需要理解MRC,但实际使用时强推ARC。1. Objective-c语言中的MRC(MannulReferenc原创 2015-07-22 23:21:03 · 896 阅读 · 0 评论