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

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



你可能感兴趣的:(在学习iOS的MRC管理中,遇到的retain引起的循环问题、NSString问题)