zoukankan      html  css  js  c++  java
  • 手工内存管理规则的总结

        1.如果需要保持一个对象不被销毁,可以使用retain.在使用完对象后,需要使用release销毁

        2.给对象发送release消息并不会销毁对象,只有当这个对象的引用计数减为0时,对象才会被销毁.然后系统会发送dealloc消息给这个对象用于释放它的内存.

    对使用了retain或者copy,mutableCopy,alloc或者new方法的任何对象,以及具有retain和copy特性的属性进行释放需要覆盖dealloc方法,使得对象在释放的时候能够释放这些实例变量.

        3.在自动释放池被清空时也会自动释放的对象做些事情.系统每次都会在自动释放池被销毁的时候发送release消息给池中的每个对象.如果池中的对象引用计数减为0, 系统会发送dealloc消息销毁这个对象.

        4.如果在方法中不再需要这个对象但需要将其返回,可以给这个对象发送autorelease消息用以标记这个对象延迟释放.autorelease消息并不会影响到这个对象的应引用计数.

        5.当应用终止时,内存中的对象都会被释放, 不论他们是否都在自动释放池中.

    当开发Cocoa或者iOS应用程序时, 随着应用程序的运行自动释放池会被创建和清空(每次的事件都会发生). 在这种情况下如果要使自动释放池被清空后自动释放池的对象还能够存在,对象需要使用retain方法,只要这些对象的引用计数大于发送autorelease消息的数量就能够在池被清理后生存下来.

                                                                                                                                                                    --摘抄自Objective-C程序设计 第六版

                                                                                                                                                                    --[美]Stephen G.Kochan著

                                                                                                                                                                    --林冀 范俊 朱奕欣

    http://www.cnblogs.com/PaulpauL/ 版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    odoo14系列笔记-基本进销存(二)
    odoo14系列笔记-基本进销存(一)
    PVE另一种方法使用中科大的镜像服务器 NGINX反向代理
    git 国内加速
    VirtualBox开启套娃模式-打开嵌套 VT-x/AMD-V 功能
    K8S集群安装(基于DEIBAN,proxmox)
    JS语法 ES6、ES7、ES8、ES9、ES10、ES11、ES12新特性
    8个非常实用的Vue自定义指令
    require和import的区别
    js异步加载之defer、async、type=module
  • 原文地址:https://www.cnblogs.com/PaulpauL/p/4733253.html
Copyright © 2011-2022 走看看