自动引用计数器(三)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoxingaiwo/article/details/81071966

1.iOS内存管理分为MRC与ARC。OS X v10.6 或 OS X v10.7(64位应用程序)上的Xcode 4.2开始支持ARC,iOS 4 和 iOS 5或更高版本支持ARC。之前的MRC的意思是手动手动引用计数器,在写代码的时候需要写一堆retain和release,这样子也不可能完全避免不会造成内存泄漏。自从有了ARC之后,妈妈再也不懂担心我成为“聪明绝顶了”。ARC有效时候不能使用autorelease方法,也不能够使用NSAutoreleasePool类。但是ARC有效时候,autorelease功能是起作用的。在ARC有效时候,@autoreleasepool会代替NSAutoreleasePool类用。
这里写图片描述
上图中左边是MRC的使用例子,右边是ARC使用例子。足以可以看出对比,ARC还是很方便使用的。
这里写图片描述
上面图片中代码没有显示指定所有权限修饰符,所以id obj通附有_strong修饰符的id _strong ibj是完全一样的。由于return使得对象变量超出其作用域,所以该强引用对自己持有的对象会被自动释放,但该对象作为函数返回值,编译器会自动将其注册到autoreleasepool中。
2.在访问附有_weak修饰符的变量时,实际上必定要访问注册到autorelease的对象。
为什么在访问附有_weak修饰符的变量时必须要访问到autorelease的对象呢?这是因为_weak修饰符只持有对象的所引用,而在访问引用对象的过程中,该对象有可能被废弃,如果把要访问的对象注册到autoreleasepool中,那么在@autoreleasepool块结束之前都确保该对象存在,因此,在使用附有_weak修饰符的变量时候就必定要注册到autoreleasepool中。所以以后在ARC无效时候也推荐使用@autoreleasepool块。

猜你喜欢

转载自blog.csdn.net/xiaoxingaiwo/article/details/81071966
今日推荐