自己刚开始学object-C开发,还处于理论阶段,看到了autorelease这个东西.
是说的是在释放自动变量池的时候才会释放池中的变量.假设一个函数,通常看到的调用代码是void Fun1()
{
NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc]init];
ClsA *A=[[ClsA alloc]init];
//A do sth...
[A autorelease];
[pool release];
return;
}既然自动变量池是在release的时候才会释放资源,是否可以将代码改为;
void Fun2()
{
NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc]init];
ClsA *A=[[[ClsA alloc]init]autorelease];
//A do sth...
[pool release];
return;
}如果在定义变量的时候都这样做了,岂不是能够更容易的避免内存泄露了?
但是没有看到过这种用法,why ?求解...

解决方案 »

  1.   

    手动RELEASE比autorelease的性能要高。
      

  2.   


    恩,我知道手动release的效率更高
    我只是对于autoease的好奇.
    为什么不在分配的时候直接autorelease了?
    因为实际的release也是在代码的末尾才会进行的啊~
      

  3.   

    LZ还是认真看看autoease的概念和适用情况吧。
    这个属于基础的知识范畴,不建议讨论,也没有什么讨论的。
      

  4.   

    你给的两个代码 用处没有区别autorelease只是一个标记,标识这个东西 会在释放池中自动释放不需要自己去手动释放
      

  5.   

    因为就是觉得是一样的
    然后,如果一条语句直接写的话,岂不是降低了很多忘了autorelease的可能?
    只是搞不懂为什么在别人的代码里没有看到过这种写法?
    在能用autorelease的地方
    这种一条语句写的.有啥缺点没?
      

  6.   

    可以直接分配的时候autoRelease。
    写法不一样而已,一样的,我有的时候就这样写的,这样写没什么错。
      

  7.   

    两个写法一样的,只是多一行代码,与少一行代码。还有可能这样写,方便alloc与release或autoRelease对应好查找内存泄露