Joh*_*lla 2 release objective-c xcode4 ios5
我有这个字符串代码,我在尝试释放内存时遇到问题,我了解到只有那些释放它的人才进行初始化,而不是自动释放,但是我遇到了字符串“ end”和nSum版本的问题。
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
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助。
更新:
- (IBAction)mostrarOpciones {
// code (UP)
}
Run Code Online (Sandbox Code Playgroud)
如果您使用以init,new,copy或mutableCopy开头的方法创建对象,则您拥有该对象并在完成后负责释放它(或自动释放它)。如果使用任何其他方法创建对象,则该对象会自动释放,而无需释放它。在这种情况下,如果要保留对象,则实际上需要保留该对象。Apple有一份包含所有这些规则的《内存管理编程指南》。
您发布的代码实际上是正确的。您需要释放它urlBase,op因为您使用init开头的方法(initWithFormat:在这种情况下)创建了它们。final并且nSum已经为您自动发布。final是由不以init,new,copy或mutableCopy开头的方法(在这种情况下为factory方法stringByAppendingFormat:)创建的。nSum由称为的方法返回text,您可以假定sumTextField在“归还”给您之前已“拥有”它或已自动释放它,因此您不负责释放它。