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;  这样没有释放了,没办法没有建立实际的对象。。~~。

  • 相关阅读:
    sql server 获取存储过程,表值,标量函数的参数
    拼接枚举字符串
    存储过程的输出接受强类
    映射对象
    C# abstract,virtual 修饰符
    SqlSugar之SqlQueryDynamic返回值处理
    sql server 中数据库数据导入到另一个库中
    sql server 自增长显式添加值
    sql得到表中的列信息
    程序中MMap集合数据重复导致程序慢的情况
  • 原文地址:https://www.cnblogs.com/fanxinguu/p/4364204.html
Copyright © 2011-2022 走看看