ios 内存问题

众所周知ios的内存管理是通过retainCount(引用计数器)来管理的,当retainCount为零时就会将对象销毁。alloc retain  都会让retainCount 加一,release 则会使retainCount减一,autorelease则在对象被加入的那个自动释放池被销毁的时候retainCount也会减一。

     本人也是新手,这里用博客记录下我遇到的ios内存的问题:

     1用retain属性声明一个变量然后用set方法初始化造成内存泄露:

.h中我们声明了:

      @property(nonatomic, retanin) ClassName *name;

.m中我们使用:

   @sysnthesize name;

- (void)dealloc{

       self.name = nil;//          建议使用

     [_name release]; //如果 有name = _name;

   [self.name release];//不推荐使用

}

在给他初始化的时候:self.name = [[ClassName alloc] init];在这里我们把等号右边的创建的对象命名为A方便讲述, 在这个初始化的语句中我们使用set方法将 A retain了一次那现在 A 的retainCount 为2,当dealloc调用时name release后A的计数器减一。但此时A的计数器还是为1所以这里A就没被释放造成了内存泄露。为什么呢?

因为系统的set方法是:

- (void)setName:(ClassName*)sName{

        [name  release];

        name = [sName retain];//这里使A的计数器加一了

}

解决这种问题的方法有多种:1 self.name = [[[ClassName alloc] init] autorelease];让等号右边加入自动释放池。 2 不适用set方法 _name = [[ClassName alloc] init]; 这样就不会使A的count加一了。我们前万要记住如果是使用 assign 或者copy的关键使用时要小心。

    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值