zoukankan      html  css  js  c++  java
  • autorelease,autoreleasepool基本使用

    autorelease基本使用:

    1>给对象发送一条autorelease消息,会将对象放到一个自动释放池中

    2>当自动释放池也被销毁时,会对池子里面所有对象做一次release操作

    3>调用完autorelease之后,对象计数器不变

    autorelease的好处:

     1>不用关心对象释放的时间

     2>不用关心什么时候调用release

    autorelease使用注意:

     1>占用内存大的对象不要随便使用autorelease

     2>占用内存小的对象使用autorelease,没有太大影响

    autoreleasepool:在iOS程序运行时,会创建无数个池子,这些池子以栈结构存在(先进后出);当一个对象调用autorelease方法时,会将这个对象放到栈顶的释放池。

    (一)基本用法

    (1)会将对象放到一个自动释放池中

    (2)当自动释放池被销毁时,会对池子里的所有对象做一次release

    (3)会返回对象本身

    (4)调用完autorelease方法后,对象的计数器不受影响(销毁时影响)

    (二)好处

    (1)不需要再关心对象释放的时间

    (2)不需要再关心什么时候调用release

    (三)使用注意

    (1)占用内存较大的对象,不要随便使用autorelease,应该使用release来精确控制

    (2)占用内存较小的对象使用autorelease,没有太大的影响

    (四)错误写法

    (1)连续调用多次autorelease,释放池销毁时执行两次release(-1吗?)

    (2)Alloc之后调用了autorelease,之后又调用了release。

    (五)自动释放池

    (1)在ios程序运行过程中,会创建无数个池子,这些池子都是以栈结构(先进后出)存在的。

    (2)当一个对象调用autorelease时,会将这个对象放到位于栈顶的释放池中

    (六)自动释放池的创建方式

    (1)ios 5.0以前的创建方式

    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];

    `````````````````

    [pool  release];//[pool drain];用于mac 

    (2)Ios5.0以后

    @autoreleasepool

    {//开始代表创建自动释放池

    ·······

    }//结束代表销毁自动释放池

    (七)Autorelease注意

    (1)系统自带的方法中,如果不包含alloc new copy等,则这些方法返回的对象都是autorelease的,如[NSDate  date];

    (2)开发中经常会写一些类方法来快速创建一个autorelease对象,创建对象时不要直接使用类名,而是使用self

     

     

    以上部分参考 文顶顶 博客

  • 相关阅读:
    C++ 扩展 Op
    Python 扩展 Op
    VS Code 调试 OneFlow
    运行时数据获取
    OFRecord 图片文件制数据集
    OFRecord 数据集加载
    OFRecord 数据格式
    OneFlow 并行特色
    Consistent 与 Mirrored 视角
    作业函数的定义与调用
  • 原文地址:https://www.cnblogs.com/sleblogs/p/5528701.html
Copyright © 2011-2022 走看看