如果我有一个方法
- (void) myMethod:(NSString *)string {
[Object anothermethodWithString:string];
}我打电话给你
[Object myMethod:@"this is a string with no alloc statement"]我需要做像这样的事情吗?
- (void) myMethod:(NSString *)string {
NSString *string2 = [[NSString alloc] initWithFormat:@"%@", string];
[Object anothermethodWithString:string2];
[string2 release];
}而不是我以前拥有myMethod的方式?我有一些行为异常的代码,似乎是由于一个字符串被自动释放,而另一个方法中的第二个方法正在被调用(就像在这个例子中一样)。第二种方式,我让myMethod解决了我所有的问题。
那么“非分配”字符串是自动释放的字符串吗?我问了这个问题作为另一个问题的后续(这是完全无关的,也是我创建这篇文章的原因),一些消息来源说我不需要重新分配字符串。我很困惑,因为我的代码行为告诉我不是这样的。
发布于 2010-07-17 11:54:37
戴夫说对了。您只需考虑在new、alloc、retain或copy对象上调用release。
上面的规则非常有效,但如果你很好奇,想深入了解更多细节,我建议你阅读苹果文档中的Memory management Programming Guide。它是免费的,从基本概念到很多细节。
发布于 2010-07-17 11:13:54
如果使用: NSString *str = @"“。它是一种常量,你不需要做任何内存管理。
如果你从一个方法调用: NSString *str = NSString stringWithFormat:@"",字符串已经被自动释放了。
如果您手动分配,则初始化。您需要调用release,或者自己自动释放。
一般的内存约定是:如果您使用new、alloc、retain或copy执行某些操作,则需要自己释放它,任何其他情况下,对象都是自动释放的,不要释放它
https://stackoverflow.com/questions/3270071
复制相似问题