您的位置:首页 > 移动开发 > IOS开发

在学习iOS的MRC管理中,遇到的retain引起的循环问题、NSString问题

2015-07-14 22:09 239 查看
1.retain循环问题引起:

1)A类中有B的实例对象,并且使用了retain.

2) B类中有A的实例对象,也使用了retain。

3)A和B在程序中,并互相赋值。

解决办法:在循环的一端类中用assgin,一端用retain. 注意内存泄漏问题.

2.在NSString的内存管理中,比较特殊的是通过不同的方法建立的变量,存储的地方不同。

一般的:stringWithString: 、initWithString: 、@“xxx” 、init等建立在常量区(就是在内存的数据区。)

使用:stringWithFormat: 、 initWithFormat: 是建立在堆区。

3.autorelease 和autoreleasepool

什么是autorelease?

autorelease是暂存对象,通常是和自动释放池一起使用,当调用autorelease的对象,自动加入自动释放池中,当自动释放池销毁时,对象也会随之销毁。

什么是autoreleasepool?

autoreleasepool也叫(自动释放池),是栈的结构存在,所以要有“先进后出”的原则。在加入自动释放池的对象后,自动释放池的可以帮助我们管理对象,在最后的的时候会向每

个对象发送一个release.

使用autoreleasepool的使用

1⃣在自动释放池代码块内的对象,使用autorelease来加入池中。

2⃣在自动释放池外的对象要想加入,在池中的调用autorelease来加入.

3⃣在创建对象时,可以直接调用autorelease来加入。 (autorelease返回值还是创建对象时的类型。引用autorelease的计数器不会变)

使用autoreleasepool的注意

1⃣尽量不要将较大的的数据对象存在池中操作,会延迟对象的释放时间。

2⃣使用较小的数据对象时,方便我们管理,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: