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⃣使用较小的数据对象时,方便我们管理,