我试图理解什么时候调用autorelease,这将对我的对象实际做什么.
在Mac Developer Library中阅读About Memory Management后,我了解到,当您有一种方法作为工厂方法时,通过创建一个新对象并返回它 – 该方法在返回之前无法释放该对象,因为这将导致被退回的对象被执行.
例
- (Test *) createNewTest { Test *newInstance = [[Test alloc] init]; [newInstance release]; return newInstance; // deallocted object returned. }
相反,我应该使用autorelease:
The autorelease method,defined by NSObject,marks the receiver for later release
我的问题是:如果该对象稍后被释放,我该如何知道何时被释放?
- (Test *) createNewTest { Test *newInstance = [[test alloc] init]; [newInstance autorelease]; return newInstance; } - (void) runIt { Test *myInstance = [self createNewTest]; // when is myInstance released?? and thereby not valid to my function anymore? }
如果我不知道自动释放何时发生,我该如何安全地使用我的runIt方法中返回的autoreleased对象?我应该保留createNewTest返回的对象吗?或者我可以在runIt范围内安全地使用它吗?