内存管理

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

转载于:https://www.cnblogs.com/zhao123/p/3196707.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值