IOS 的内存管理理解

有”创建“就要有”销毁“
针对创建和销毁过程进行管理

OC采用”引用计数“管理内存
1、使用alloc为对象分配内存,使用dealloc释放对象所占用的内存
2、使用alloc、new或者copy够着对象时,对象的retainCount为1
3、调用对象的retain方法可以增加1 retainCount
4、调用对象的release方法可以减少1 retainCount
5、当对象的retainCount为0时,dealloc会自动调用,释放对象内存;否则,分配给对象的内存将会被一直占用。
6、所有对象可以使用retainCount属性查看当前的计数器值。

申请内存的权利有两种 1是程序员 2是系统

会影响计数器的操作
1、alloc创建一个对象,并将其引用计数器设为1,并拥有对象的所有权
2、copy制造一个副本,并将副本的引用计数器设为1,并拥有副本的所有权,然后释放旧对象
3、retain使对象计数器加1,并拥有对象所有权
4、release使对象计数器加1,并拥有对象所有权
5、autorelease向autoreleasepool注册



一个类中,如果这个类属性声明retain或者copy的属性,那么我们需要在这个类的dealloc方法里面释放这个属性


便利构造器
return[stu autorelease]; 不立即释放,而是交给autoreleasepool



内存释放原则:
1、谁申请谁释放
2、凡是出现retain、alloc、copy的地方,都应出现release与之匹配使用。
3、a 内存无法确定释放时间时,可以只用autorelease向最近的池注册
      b 由池决定释放所有池的时间
      c 使用便利构造器获得的对象,都应是autorelease的


retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的引用计数为1

1、使用copy:对NSString
2、使用retain:对其他NSObject和其子类

strong和weak关键字的意义和使用方法
@property(strong) MyClass * myObjiect;
相当于:@property(retain)  MyClass * myObjiect;

@property(weak) MyOtherClass * delegate;
相当于: @property(assign) MyOtherClass * delegate;

一般情况下,所有的指针都是强指针
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值