zoukankan      html  css  js  c++  java
  • objective-c内存管理

    1.2内存管理原则

    当创建一个对象时(alloc new copy),创建的对象引用技术为1

    当某段代码要访问这个对象时引用技术就+1

    当这段代码完成后要对这个引用计数-1

    当引用级数为0时,表示没有代码访问这个对象了,该对象就会被销毁(这个时候oc会自动向其发送一个dealloc消息)

    这个就像是一个游戏房间,当房间中没有人的时候房间就自动解散了。

    内存管理总结:

    (一)原则

    只要还有人使用某个对象,那么这个对象就不会被回收;只要你想使用这个对象,那么就应该让这个对象的引用计数+1;当你不想使用这个对象时,应该让这个对象的引用计数-1;

    (二)谁创建,谁release

    (1)如果你通过alloc,new,copy来创建了一个对象,那么你就必须调用release或者autorelease方法

    (2)不是你创建的就不用你负责

    (三)谁retain,谁release

    只要你调用了retain,不论这个对象是如何生成的,你都要调用release

    (四)总结

    有始有终,有加就应该有减。曾经让某个对象计数器加1,就应该让其在最后-1。

    1.3内存管理代码规范

    1.只要调用了alloc,就必须要release(autorelease)

    2.setter方法的规范:

    基本数据类型直接赋值

    oc对象类型,先判断和正在使用的是不是一个如果是,则什么都不做,如果不是,先将现在的release,并对新的retain;

    - (void)setAge:(int) age

    {

            _age = age;

    }

    //不是oc对象不变

    - (void) setCar:(car*) car

    {

         if( car!=_car ){

               [_car release];

               _car = [car retain];   

          }

    }

    3.dealloc方法的代码规范

    [super dealloc]放在最后面

    - (void) dealloc

    {

        [car release];

        [super dealloc];

    }

    4.这样写会出现垃圾代码

    [[Car  alloc] init ].speed = 100;  这样没有释放了,没办法没有建立实际的对象。。~~。

  • 相关阅读:
    事件
    10- JMeter5.1.1 工具快速入门
    06- Linux Ubuntu下sublime下载与使用与安装包
    控件是什么意思?
    09- 性能测试关键指标
    08- Tomcat入门与环境搭建部署
    07- HTTP协议详解及Fiddler抓包
    06- web兼容性测试与web兼容性测试工具
    05- web网站链接测试与XENU工具使用
    04- cookie与缓存技术
  • 原文地址:https://www.cnblogs.com/fanxinguu/p/4364204.html
Copyright © 2011-2022 走看看