• 内存管理


    每个对象都保存一个与之相关联的整数,称为计数器,当使用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循环中

  • 相关阅读:
    HDU5320 : Fan Li
    BZOJ3069 : [Pa2011]Hard Choice 艰难的选择
    BZOJ4227 : 城市
    BZOJ4216 : Pig
    BZOJ1171 : 大sz的游戏
    BZOJ4182 : Shopping
    BZOJ3482 : [COCI2013]hiperprostor
    BZOJ3919 : [Baltic2014]portals
    BZOJ3711 : [PA2014]Druzyny
    BZOJ1580 : [Usaco2009 Hol]Cattle Bruisers 杀手游戏
  • 原文地址:https://www.cnblogs.com/zhao123/p/3196707.html
Copyright © 2020-2023  润新知