首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSString *string = @"someString“vs NSString *string = [[NSString alloc] initWithFormat@"%@",string]

NSString *string = @"someString“vs NSString *string = [[NSString alloc] initWithFormat@"%@",string]
EN

Stack Overflow用户
提问于 2010-07-17 11:06:44
回答 2查看 3.8K关注 0票数 3

如果我有一个方法

代码语言:javascript
复制
- (void) myMethod:(NSString *)string {
    [Object anothermethodWithString:string];
}

我打电话给你

代码语言:javascript
复制
[Object myMethod:@"this is a string with no alloc statement"]

我需要做像这样的事情吗?

代码语言:javascript
复制
- (void) myMethod:(NSString *)string {
    NSString *string2 = [[NSString alloc] initWithFormat:@"%@", string];
    [Object anothermethodWithString:string2];
    [string2 release];
}

而不是我以前拥有myMethod的方式?我有一些行为异常的代码,似乎是由于一个字符串被自动释放,而另一个方法中的第二个方法正在被调用(就像在这个例子中一样)。第二种方式,我让myMethod解决了我所有的问题。

那么“非分配”字符串是自动释放的字符串吗?我问了这个问题作为另一个问题的后续(这是完全无关的,也是我创建这篇文章的原因),一些消息来源说我不需要重新分配字符串。我很困惑,因为我的代码行为告诉我不是这样的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-17 11:54:37

戴夫说对了。您只需考虑在newallocretaincopy对象上调用release

上面的规则非常有效,但如果你很好奇,想深入了解更多细节,我建议你阅读苹果文档中的Memory management Programming Guide。它是免费的,从基本概念到很多细节。

票数 4
EN

Stack Overflow用户

发布于 2010-07-17 11:13:54

如果使用: NSString *str = @"“。它是一种常量,你不需要做任何内存管理。

如果你从一个方法调用: NSString *str = NSString stringWithFormat:@"",字符串已经被自动释放了。

如果您手动分配,则初始化。您需要调用release,或者自己自动释放。

一般的内存约定是:如果您使用new、alloc、retain或copy执行某些操作,则需要自己释放它,任何其他情况下,对象都是自动释放的,不要释放它

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3270071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档