zoukankan      html  css  js  c++  java
  • 内存管理之ARC

      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方法。

  • 相关阅读:
    .NET拾忆:FileSystemWatcher 文件监控
    .NET拾忆:EventLog(Windows事件日志监控)
    MSSqlServer 主从同步复制原理(发布/订阅)
    MSSqlServer 发布/订阅配置(主从同步)
    Entity Framework Code First(Mysql)
    .Net拾忆:Asp.net请求管道
    http://blog.csdn.net/dianhuiren/article/details/7543886 该作者对操作系统底层研究较深
    page cache 与 page buffer 转
    linux free命令中buffer与cache的区别
    Nginx重写规则指南 转
  • 原文地址:https://www.cnblogs.com/PJXWang/p/5191932.html
Copyright © 2011-2022 走看看