在Objective-C中创建一个NSString

4

可能重复:
使用@“…”生成的NSString需要释放吗?

在Objective C中创建NSString对象有两种方式。

方法1:

// string1 will be released automatically 

NSString* string1 = [NSString string]; 

// must release this when done 

方法二

NSString* string2 = [[NSString alloc] init]; 

[string2 release];

如果我执行

NSString *string = @"This is a string";

我的问题是上述声明属于哪种情况,最终我们是否应该发布

4个回答

8

字符串常量不需要释放;它们既不需要显式释放,也不需要自动释放;它们只是常量,并且永远不会被销毁。

所以,只有在先前保留了它们时才需要-release它们。


字符串常量永远不会被释放。您可以从函数中返回它们,它们仍然有效。 - Tom Dalling

2

在第一个和最后一个中,您没有拥有(分配和初始化)字符串,因此不需要释放它们。而在第二个中,您手动分配了它,因此必须释放它。如果您的代码中使用对象,则应该使用第二个,否则使用第一个或最后一个。


1
非常基础的问题。当你提到“拥有字符串”时,你的意思是“分配和初始化它”。如果我理解有误,请纠正我。 - tranvutuan
你拥有字符串,意味着你分配它。init仅是一个实例方法,以确保实例处于适当的状态。 - fengd
这只是为了解释,对于那些了解深度级别的人,会自动理解整个过程。 - Saad

2
如果您正在使用ARC,您根本不需要释放内存,只需将 string = nil; 放入代码中即可。但是,现在您不需要释放它。

1
使用ARC,几乎没有理由不这样做。它使开发更加容易和强大。 - zaph

1

如果你使用了alloc,那么你就应该使用release

通过static方法创建的字符串如下:

[NSString stringWithXXXX];

是“自动释放”

@H2CO3 关于常量是正确的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接