objective-c - NSString 发布

标签 objective-c xcode4 ios5 release

我有这个字符串代码,我在尝试释放内存时遇到问题,我知道只有那些释放它的人会初始化并且不是自动释放,但是我在字符串“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

谢谢你的帮助。

更新:
- (IBAction)mostrarOpciones {
 // code (UP)
}

最佳答案

如果您使用以 init、new、copy 或 mutableCopy 开头的方法创建对象,那么您拥有该对象并负责在完成后释放它(或自动释放它)。如果您使用任何其他方法创建一个对象,该对象将自动释放,您不需要释放它。在这种情况下,如果你想保留它,你实际上需要保留它。苹果有一个 Memory Management Programming Guide这包括所有这些规则。

您发布的代码实际上是正确的。您需要发布 urlBaseop因为您使用以 init 开头的方法创建了它们(在本例中为 initWithFormat:)。 finalnSum已经为您自动发布。 final 是由不以 init、new、copy 或 mutableCopy 开头的方法创建的(在本例中为工厂方法 stringByAppendingFormat:)。 nSum 由名为 text 的方法返回。 ,并且您可以假设 sumTextField “拥有”它或在将其返回给您之前已自动释放它,因此您不负责释放它。

关于objective-c - NSString 发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8702540/

相关文章:

cocoa - 在启用应用程序沙箱的情况下启用登录时启动

objective-c - 在部分之间移动一行

iphone - 在iphone中设置UIToolBar的背景图片

iphone - Xcode 4 : how to implement game center achievements?

crash - iOS5-崩溃日志中的KERN_INVALID_ADDRESS

iOS - 为什么当我在 Storyboard 中创建按钮时没有创建属性字段?

objective-c - 如何在 iOS 5 的 Info.plist 中创建 UIBackgroundModes 键

ios - 如何在 prepareForSegue 函数中搜索数据时获取 indexPath

objective-c - 我如何通知一个线程等待下载完成,然后将数据传递给等待线程

xcode 4 build设置说明