博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内存管理之ARC
阅读量:4322 次
发布时间:2019-06-06

本文共 1161 字,大约阅读时间需要 3 分钟。

  ARC是编译器的一个功能,与支持代码静态分析的机制一样,当开发者编译应用程序时,编译器将检查Objective-C对象指针(也叫引用)的用法,然后按照retain计数的规则,进行retain计数、释放和自动释放的检查,确保对象在需要的时候能够正确存在,在不需要时重新分配。

  在使用ARC后进行retain、release和autorelease将产生错误。在ARC 的帮助下,程序员可以不用关注对象的retain计数,而将更多的关注点放在这些对象的关系上。对象之间的关系就是引用(其实就是对象指针)

  两种类型的引用:强引用和弱引用

    1.强引用

    默认情况下都是强引用。假如一个对象被分配为强引用,ARC则认为该对象就在附近,并且retain也是隐式的。假如将引用改变为一个新的值,旧的对象被释放,新的对象被retain。

  2.弱引用

    弱引用于旧的手动引用计数指针相似:没有隐式的retain,指针值只在内存在修改。然而这样的引用一直是引起程序崩溃的原因。假如指针没有被retain,这个对象就被重新分配,那么将留下一个坏指针,在以后使用时就是一个潜在的引起崩溃的原因。ARC解决这个问题的方法是指针指向的对象被重新分配时,自动将弱引用设为nil,这就是所谓的“zeroing weak reference”.弱引用一般用来解决retain循环的问题。

注意:只有使用ARC编译的类才可以对其设置弱引用,如果需要对一个弱引用变量赋值,但这个类不支持弱引用的话,程序将抛出异常。因此,可使用__unsafe_unretained修饰符来代替__weak修饰符。

  ARC补充知识

    使用ARC机制的代码无须修改,就能与手动引用计数的代码一起使用。事实上,在单个文件基础上才能使用ARC。

    Xcode提供了从已有代码向ARC机制转换的工具,这个工具在Edit菜单中找到,Refactor->Convert to Objective-C Automatic Reference Counting下

    尽管ARC代码可以运行在Mac OS X 10.6和iOS 4上,但这些平台并不支持弱引用的使用

    尽管Objective-C在很多情况下可以与C语言一起混合使用,但是ARC并不允许C语言结构体包含对象指针

    属性命名不能以new开始。

    在ARC下,调用retain、release、autorelease或者dealloc(如with [super dealloc])将产生错误,也不能重载retain、release或者autorelease方法。

转载于:https://www.cnblogs.com/PJXWang/p/5191932.html

你可能感兴趣的文章
AndroidStudio-快捷键
查看>>
用python DIY一个图片转pdf工具并打包成exe
查看>>
6月14 空控制器和空操作及命名空间
查看>>
volicity文法学习和总结
查看>>
block 块的内部结构
查看>>
IDEA修改git账号密码
查看>>
C# 插入排序
查看>>
每周总结16
查看>>
9_2二维数组
查看>>
为django项目创建虚拟环境
查看>>
30-RoutingMiddleware介绍以及MVC引入
查看>>
【转】AB实验设计思路及实验落地
查看>>
PHP获取客户端的IP
查看>>
C# 创建单例窗体封装
查看>>
移动端报表如何获取当前地理位置
查看>>
spring 源码
查看>>
使用 opencv 将图片压缩到指定文件尺寸
查看>>
linux中~和/的区别
查看>>
在vue-cli项目中使用bootstrap的方法示例
查看>>
jmeter的元件作用域与执行顺序
查看>>