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

    每个对象都保存一个与之相关联的整数,称为计数器,当使用alloc,new,copy创建一个对象时,对象的计数器被设置为1,给对象发送一条retain消息,计数器加一,当给对象发送一条release消息,计数器减一,当计数器为0时,这个对象被销毁。retainCount获得计数器的值。谁创建谁释放,谁ratein谁release

    如果是OC对象之间的调用@property(retain)Book * book;// @property有参数retain代表让编译器帮准管理内存

    readonly代表只生成getter方法@property(nonatamic,readonly)int age;//只生成get方法

    @property(nonatomic,getter=isRich) BOOL rich;//制定getter的方法名

    nonatomic代表不考虑线程问题,以后都加上,因为默认是atomic是加锁的,造成系统浪费,iphone是小设备。

    @property(nonatamic)int age;

    @property(nonatomic,retain)Book * book;//这些一些自动生成get和set方法

    @autoreleasePool自动释放池,按栈的方式存放,先进后出

    Student *stu=[[Student alloc]init];

    [stu autoralease];//当运行结束是自动调用一次release;也就是说如果计数器是2,stu将没有被释放。此举还等于Student* stu=[[ [Stduent alloc]int]autorelease];简单的说也是release的延迟,用autorelease自动释放方便了内存管理,还比较安全。静态方法返回的对象都是自动释放的,所以调用系统的静态方法不用管理内存。我们自己建立静态方法要用autorelease比较方便

    +(id)student

    {

             Student *stu=[[[Student alloc] init] autorelease];

             Return stu;

    }

    外面调用时用在释放内存,以为自动了。Student* stu=[Student student];

    内存比较大的尽量少用autorelease自动释放池,自己手动写,不要把过的的自动释放写在一起,例如for循环中

  • 相关阅读:
    书单
    将博客搬至CSDN
    《当我谈跑步时,我谈些什么》读后笔记
    jQuery EasyUI 教程-Tabs(选项卡)
    jqGrid中的formatter
    jqGrid中的编辑
    struts2中action接收参数的方法
    Hibernate基础(4):基础配置@Table@Column@Temporal@Transient@Enumerated
    Hibernate @Temporal
    搭建python项目
  • 原文地址:https://www.cnblogs.com/zhao123/p/3196707.html
Copyright © 2011-2022 走看看