objective-C 的内存管理之-引用计数 obj-c本质就是"改进过的c语言",大家都知道c语言是没有垃圾回收(GC)机制的(注:虽然obj-c2.0后来增加了GC功能,但是在iphone上不能用,因此对于iOS平台的程序员来讲,这个几乎没啥用),所以在obj-c中写程序时,对于资源的释放得由开发人员手动处理,相对要费心一些。 引用计数 这...
目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。 垃圾回收(Garbage Collection/GC) 就是释放不再需要的内存空间。是一种自动的内存管理机制。 两种内存管理机制 引用计数收集器(Objective-C中的MRC和ARC) 最早期的垃圾回收实现方法,是最简单的实现,但存在无法回收循环引用的存储对象的缺陷。引用计数...
当执行完Test()方法之后o就会被释放,此时由于没有变量在引用new Object()这个对象,因此GC会自动回收这个对象所占用的空间。 但是在ObjC中没有垃圾回收机制,那么ObjC中内存又是如何管理的呢?其实在ObjC中内存的管理是依赖对象引用计数器来进行的:在ObjC中每个对象内部都有一个与之对应的整数(retainCount),叫“引...
答: OC 的数据类型有NSString、NSNumber、NSArray、NSMutableArray、NSData 等,这些都是class,创建后便是对象;而 C 的基本数据类型 int,只是一定字节的内存空间,用于存放数值;NSInteger 是基本数据类型,并不是NSNumber 的子类,当然也不是NSObject 的子类。NSInteger 是基本数据类型Int 或者 Long 的别名(NSInteger...
因为是非gc的对象,所以默认的assign修饰符是不行的。那么什么时候用assign、什么时候用retain和copy呢?推荐做法是NSString用copy,delegate用assign(且一定要用assign,不要问为什么,只管去用就是了,以后你会明白的),非objc数据类型,比如int,float等基本数据类型用assign(默认就是assign),而其它objc类型,比如NSArray,...
*利用objc-class.mm中_class_lookupMethodAndLoadCache3(为什么有个这么奇怪的方法。本文末尾会解释)方法去寻找selector *如果支持GC,忽略掉非GC环境的方法(retain等) *从本class的method list寻找selector,如果找到,填充到缓存中,并返回selector,否则寻找父类的method list,并依次往上寻找,直到找到selector,填充到...
因为NSObject并不是在objc-runtime被完整实现了哦,有一部分简单的实现(description相关)是被CF运行时...
这本书有三个章节,我针对每一章节进行总结并加上适当的扩展分享给大家。可以从下面这张图来看一下这三篇的整体结构: 注意,这个结构并不和书中的结构一致,而是以书中的结构为参考,稍作了调整。 本篇是第一篇:引用计数,简单说两句: Objective-C通过 retainCount 的机制来决定对象是否需要释放。 每次runloop迭代结...
和C++ 不同,ObjC 是有类对象的。类对象里有超类指针、类名、类方法列表指针,还有类对象的字节大小等元信息。而 C++ 中是用 RTTI 类实现不完全的类似功能的。 调用类方法和调用实例方法在语法上没有什么不同。类名就是类对象的名字。 ObjC 不支持多继承,没有私有、公开这些修饰符。