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