我的问题可能听起来很愚蠢,但我想知道如果我将自动释放的对象标记为自动释放会发生什么。会发布两次吗?还是什么都没发生?例如:
Obj * obj = [[Obj create] autorelease];
假设[Obj create]
返回一个自动释放的对象。
如果我添加另一个自动释放,那么会发生什么?
我的问题可能听起来很愚蠢,但我想知道如果我将自动释放的对象标记为自动释放会发生什么。会发布两次吗?还是什么都没发生?例如:
Obj * obj = [[Obj create] autorelease];
假设[Obj create]
返回一个自动释放的对象。
如果我添加另一个自动释放,那么会发生什么?
是的,发送autorelease
两次将释放对象两次。如果您的create
方法返回一个自动释放的对象并且您向autorelease
它发送另一条消息,您的应用程序将崩溃,因为您将释放一个已释放的对象。
话虽如此,您为什么不使用新的自动引用计数(ARC)?您不必再担心(自动)释放对象了。
您使用类方法(+),您不应该关心内存。人们使用 Class Method 的一个原因是它可以返回一个自动释放对象。如果你释放或自动释放类方法返回的对象,它会崩溃。