小编use*_*923的帖子

ARC和自动释放

autorelease用于返回的函数对象,因此调用者不会获得所有权,被调用者将来会释放该对象.

但是,ARC能够计算调用者的所有权并在使用后释放它,也就是说,它可以像C++中的智能指针一样行为.使用ARC,它可以摆脱自动释放,因为自动释放是非确定性的.

我问这个问题的原因是我确实看到返回的对象在ARC中比非ARC代码更早地调用dealloc.这让我认为ARC可以像Smart Pointer一样,并且可以使autorelease无用.这是真的还是可能的?我唯一可以考虑自动释放有用的是多线程或网络代码,因为在对象传递时计算所有权可能并不容易.

谢谢你的想法.

这是一个新的编辑,使事情清楚:

与自动释放

+ (MyClass*) myClass
{
    return [[[MyCClass alloc] init] autorelease];
}

- doSomething
{
   MyClass *obj = [MyClass myClass];
}
Run Code Online (Sandbox Code Playgroud)

使用ARC:

+ (MyClass*) myClass
{
    return [[MyCClass alloc] init]; // no autorelease
}

- doSomething
{
   MyClass *obj = [MyClass myClass];
   // insert [obj release]
}
Run Code Online (Sandbox Code Playgroud)

所以,我们真的不需要自动释放.

memory-management reference-counting objective-c ios automatic-ref-counting

13
推荐指数
4
解决办法
1万
查看次数