[英]iphone memory management and arrays
我仍在努力围绕iPhone内存管理工作。 我已经检查了泄漏情况,但我想确定一下。 这没有泄漏吗?
NSMutableArray *array = [[NSMUtableArray alloc] init];
NSMutableString *str = [[NSMutableString alloc]];
[str appendstring:@"hi"];
[array addObject:str];
[str release]; //this is the bit I am most concerned about
...some processing of array occurs...
[array release];
假设您的第二行实际上是这样的:
NSMutableString *str = [[NSMutableString alloc] init];
然后,是的,没有泄漏。 当您将字符串添加到数组时,该数组会对该字符串具有所有权权益,因此在随后的声明中release
该字符串的所有权就可以了。 它仍然按预期存在于数组中。
释放数组时,它将负责清理自己的引用,包括指向您放入其中的字符串的引用。
大拇指规则,您可以在便利贴上写上此贴,然后在您的桌面上贴上
如果您是所有者,则分配,新建,初始化或复制的内容是:)
您必须释放它! 没有人会为您清理。
**示例:
NSString *releaseMeLaterPlease = [NSString initWithString....];
如果您以示例中的方式创建其他方式,则假定“ bag”是某个数组,
NSString *dontReleaseMe = [bag objectAtIndex:0];
现在,dontReleaseMe不是由alloc,new,init或copy创建的,因此您不会释放它们。 有人会做。
如果在alloc和init之后使用autorelease,则OS将负责释放它。
最重要:现在,开发人员不必担心这些问题!!! Hoooooray! 从iOS5开始自动引用计数
但是,最好学习一下,因为并非所有设备都具有iOS5 :)
祝好运!
quixoto回答了这个问题,但是只是为了明确起见,这是关于每一行代码中的内存管理的情况:
NSMutableArray *array = [[NSMUtableArray alloc] init]; //array retain count = 1
NSMutableString *str = [[NSMutableString alloc]]; //str retain count = 1
[str appendstring:@"hi"];
[array addObject:str]; //str retain count = 2
[str release]; //str retain count = 1
...some processing of array occurs...
[array release]; //array retain count = 0 & str retain count = 0 .. objects will be removed from memory.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.