在 @autoreleasepool 中的代码,如果用的不是那些7788框架的,用的是自己定义的类,然后调用 alloc init 方法后的,要不要调用 autorelease 方法,不加的话会自动释放吗?是不是有ARC存在的情况下才会自动释放,没有ARC的情况下我就要再调用 autorelease 方法?

解决方案 »

  1.   

    给你解释一下
    在oc的内存管理中,如果你能真正的理解autoreleasepool ,那么你才能理解oc的内存管理,autorelease 消息实际上是把release的调用延迟了,当我们给一个对象发送autorelease消息时,系统会把该对象放入到当前的autoreleasepool(自动释放池)中,当这个pool被释放时,该pool中所有的对象会执行release消息进么对象的释放。
    对于每个runloop,系统会隐式创建一个autoreleasepool, 在这个runloop结束时,它隐式创建的autoreleasepool就会被销毁,同时这个pool中所有的对象也会被release
    对于你上面的总是,通过上面的介绍,应该已经有了答案:
    在非arc下,自己创建的对象,需要自己销毁。所以需要自己来对这个对象发送autorelease/release 消息。而在arc下,内存管理交给编译器,用户不用担心对象的生命周期。
      

  2.   


    我就想问一下在 arc 下我要不要调用 autorelease 方法
      

  3.   

    我就想问一下在 arc 下我要不要调用 autorelease 方法
      

  4.   


    我就想问一下在 arc 下我要不要调用 autorelease 方法上面已经回了,在arc模式下,不需要再调用 autorelease ,即使加了,如果在开启arc的情况下,在编译时应该就会提示了,你不会编译通过的。
      

  5.   


    我就想问一下在 arc 下我要不要调用 autorelease 方法上面已经回了,在arc模式下,不需要再调用 autorelease ,即使加了,如果在开启arc的情况下,在编译时应该就会提示了,你不会编译通过的。嗯好的。谢谢你了,我os x 还没装,买电脑后装了环境自己试试。谢谢你了