为什么它工作没有“保留”对象罚款?
-
26-09-2019 - |
题
下面我用自动释放关于“tempString”在方法“测试”。根据规则,我应该用在主“[临时保留]”。但我没有使用它。它仍然能正常工作并打印输出。那么什么是“保留”的需要?任何人请告诉我原因吗?由于事先。
-(NSMutableString *) test : (NSMutableString *) aString{
NSMutableString *tempString=[NSMutableString stringWithString:aString];
[tempString appendString:@" World"];
return tempString;}
int main (){
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
MemoryMgmt *memoryMgmt=[[MemoryMgmt alloc] init ];
NSMutableString *str1 =@"Hello";
NSMutableString *temp = [memoryMgmt test: str1];
NSLog(@" %@",temp);
[pool drain];
return 0;
}
解决方案
stringwithString
应该返回一个自动释放NSMutableString
,但实际上并没有得到释放,直到NSAutoReleasePool
水渠。您正在使用的对象,而池仍保留它,只有排水池后,释放的对象。
当你从什么地方得到一个自动释放的对象,你应该只保留它,如果你打算跟踪的对象超出当前变量的作用域。如果你要保留的对象,但大家参考当中去的范围了(因为它当前的函数调用完成后所做的),你会泄漏的对象。
你在做什么在这里实际上是正确的,因为你不参考保持到temp
任何地方,但在局部范围内。
其他提示
当您自动释放一个对象时,它会在运行循环结束时解除池排出或释放......在你的情况,因为你开始一个新的线程,管理自动释放池,串温度不松开,直到你耗尽你的游泳池,所以当你使用它,它仍然是有效的...希望帮助
这是可行的,因为自动释放池不会被清空,直到工具的执行结束。但是,它实际上是在正确用法:你从没有声称自己是通过所有权给调用者的方法返回一个自动释放的对象。有些人做
return [[tempString retain] autorelease];
不隶属于 StackOverflow