我有这个字符串代码,在尝试释放内存时遇到问题,我了解到只有那些释放它的人才进行初始化,而不是自动释放,但是我在使用字符串“ end”和nSum release时遇到问题。
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)
}
如果您使用以init,new,copy或mutableCopy开头的方法创建对象,则您拥有该对象,并在完成后负责释放它(或自动释放它)。如果使用任何其他方法创建对象,则该对象会自动释放,而无需释放它。在这种情况下,如果要保留对象,则实际上需要保留该对象。苹果的Memory Management Programming Guide包含所有这些规则。
您发布的代码实际上是正确的。您需要释放urlBase
和op
,因为它们是使用init开头的方法(在这种情况下为initWithFormat:
)创建的。 final
和nSum
已经为您自动发布。 final是由不以init,new,copy或mutableCopy开头的方法(在这种情况下,为工厂方法stringByAppendingFormat:
)创建的。 nSum由称为text
的方法返回,您可以假定sumTextField在“归还”给您之前已“拥有”它或已自动释放它,因此您不负责释放它。
您无法释放未分配的NSString。由于未分配您的两个变量,因此不需要释放它们。