zoukankan      html  css  js  c++  java
  • Objective-C Automatic Reference Counting (ARC)

    In the standard environment, objects are allocated on the heap, and their lifetime is manually managed using a reference count. This is done using two instance methods which all classes are expected to implement: retain increases the object’s reference count by 1, whereas release decreases it by 1 and calls the instance method dealloc if the count reaches 0. To simplify certain operations, there is also an autorelease pool, a thread-local list of objects to call release on later; an object can be added to this pool by calling autorelease on it.

    Automatic Reference Counting implements automatic memory management for Objective-C objects and blocks, freeing the programmer from the need to explicitly insert retains and releases. It does not provide a cycle collector; users must explicitly manage the lifetime of their objects, breaking cycles manually or with weak or unsafe references.

    In general, ARC does not perform retain or release operations when simply using a retainable object pointer as an operand within an expression. This includes:

    • loading a retainable pointer from an object with non-weak ownership,
    • passing a retainable pointer as an argument to a function or method, and
    • receiving a retainable pointer as the result of a function or method call.

    We are not at liberty to require all code to be recompiled with ARC; therefore, ARC must interoperate with Objective-C code which manages retains and releases manually. In general, there are three requirements in order for a compiler-supported reference-count system to provide reliable interoperation:

    • The type system must reliably identify which objects are to be managed. An int* might be a pointer to a malloc’ed array, or it might be an interior pointer to such an array, or it might point to some field or local variable. In contrast, values of the retainable object pointer types are never interior.
    • The type system must reliably indicate how to manage objects of a type. This usually means that the type must imply a procedure for incrementing and decrementing retain counts. Supporting single-ownership objects requires a lot more explicit mediation in the language.
    • There must be reliable conventions for whether and when “ownership” is passed between caller and callee, for both arguments and return values. Objective-C methods follow such a convention very reliably, at least for system libraries on macOS, and functions always pass objects at +0. The C-based APIs for Core Foundation objects, on the other hand, have much more varied transfer semantics.

    https://clang.llvm.org/docs/AutomaticReferenceCounting.html#background

  • 相关阅读:
    random、shutil、shevle、标准输入输出错误流
    Python中Json 和 pickle 详解
    Python 中的sys、os、os.path模块总结
    Python 中time,calendar,datatime模块总结
    包的概念和导入包的方法
    Python 中模块及其导入方式
    迭代器和生成器
    python 函数参数
    JAVA 配置Path环境变量
    腾讯云服务器简单配置web项目
  • 原文地址:https://www.cnblogs.com/feng9exe/p/12687710.html
Copyright © 2011-2022 走看看