我有这个字符串代码,我在尝试释放内存时遇到问题,我已经明白只有那些发布它的人初始化并且不是自动释放但是我遇到了字符串“end”和nSum发布的问题。 / p>
NSString *urlBase = [[NSString alloc] initWithFormat:@"http://service.svc/"];
NSString *op = [[NSString alloc] initWithFormat:@"op1"];
NSString * final = [urlBase stringByAppendingFormat:op];
NSString * nSum = sumTextfield.text;
final = [final stringByAppendingFormat:nSum];
//release
[ urlBase release ];
[ op release ];
//[final release]; error
//[final autorelease]; error
谢谢你的帮助。
更新:
- (IBAction)mostrarOpciones {
// code (UP)
}
答案 0 :(得分:4)
如果使用以init,new,copy或mutableCopy开头的方法创建对象,那么您拥有该对象并负责在完成后释放它(或自动释放它)。如果使用任何其他方法创建对象,则该对象是自动释放的,并且您不需要释放它。在这种情况下,如果要保留对象,实际上需要保留对象。 Apple有一个Memory Management Programming Guide,其中包含所有这些规则。
您发布的代码实际上是正确的。您需要发布urlBase
和op
,因为您使用以init开头的方法创建了它们(在本例中为initWithFormat:
)。 final和nSum已经为你自动释放了。 final是由一个不以init,new,copy或mutableCopy开头的方法创建的(在本例中是工厂方法stringByAppendingFormat:
)。 nSum由一个名为text
的方法返回,你可以假设sumTextField“拥有”它或者在将它返回给你之前自动释放它,所以你不负责释放它。
答案 1 :(得分:0)
您无法释放未分配的NSString。由于您的两个变量未分配,因此无需释放它们。