我有这段字符串代码,在尝试释放内存时遇到问题,我知道只有那些释放它的人才会初始化,而不是自动释放,但我在字符串“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
谢谢你的帮助。
UPDATE:
- (IBAction)mostrarOpciones {
// code (UP)
}
如果您使用以 init、new、copy 或 mutableCopy 开头的方法创建对象,那么您拥有该对象并负责在使用完该对象后释放它(或自动释放它)。如果您使用任何其他方法创建对象,该对象会自动释放,并且您不需要释放它。在这种情况下,如果您想保留该对象,实际上需要保留该对象。苹果有一个内存管理编程指南 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html包括所有这些规则。
您发布的代码实际上是正确的。你需要释放urlBase
and op
因为您使用以 init (initWithFormat:
在这种情况下)。final
and nSum
已经为您自动发布了。 Final 是由不以 init、new、copy 或 mutableCopy 开头的方法创建的(在本例中为工厂方法stringByAppendingFormat:
)。 nSum 由名为的方法返回text
,并且您可以假设 sumTextField “拥有”它或在将其返回给您之前已自动释放它,因此您不负责释放它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)