菜鸟教程——iOS内存管理机制

任何继承了NSObject的对象,对基本数据类型无效

每个对象内部都保存了一个与之相关联的整数,称为引用计数器

当使用alloc,new,copy创建一个对象时,引用计数器都设置成为1

给对象发送一个retain,引用计数+1,release则-1;当引用计数为0时,将被销毁,被占用的内存被系统回收,oc会自动向对象发送一条dealloc消息。

可以给对象发送retainCount消息获得当前对象的引用计数器值

ARC是 Automatic Reference Counting 的简称,我们称之为自动引用计数,是IOS5.0之后推出的内存管理的新特性。本质上还是使用引用计数进行对象管理,只是编写者不需要向对象发送release或者autorelease方法,也不可以调用delloc方法,编译器会在合适的位置自动给用户生成release消息。

而GC指的是:garbage  collection ,内存垃圾回收机制;ARC比GC性能优越;

ARC中如果内存管理不当的话,同样也会造成内存泄露,比如说:ARC中,也会因为循环引用导致内存泄露;或者说,OC对象与CoreFoundation类之间桥接时,管理不当也会造成内存泄露;

ARC介于自动垃圾回收(GC)和手动内存管理之间。就像垃圾回收,ARC让程序员不再需要书写retain/release/autorelease语句。但它又不同于垃圾回收,ARC无法处理retaincycles。在ARC里,如果两个对象互相强引用(strong references)将导致它们永远不会被释放,甚至没有任何对象引用它们。

因此,尽管ARC能免去程序员大部分内存管理问题,但仍然要程序员自己避免retaincycles或手动打断对象之间的retain循环。


ARC和苹果的垃圾回收之间还有一个重要的不同:ARC不是强制的。而对于苹果的垃圾回收,要么整个程序都使用,要么都不用。也就是说在app中的所有O-C代码,包括所有的苹果框架和所有的第3方库必须支持垃圾回收,才能使用垃圾回收。相反,ARC和非ARC代码可以在一个app中和平共处。这使得将项目可以零星地迁移到ARC 而不会像垃圾回收起初遇到的各种兼容性和稳定性的问题。




著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(菜鸟教程——iOS内存管理机制)