2009-07-31 111 views
0

我真的和NSStrings混淆。就像当我应该做的iPhone Dev - NSString创建

NSString *aString = @"Hello"; 
的应该是

NSString *aString = [[NSString alloc] initWithString:@"Hello"]; 

但后来它的不同,当你将值分配给一个NSString财产,不是吗? 有人可以帮我解决这个问题吗?

谢谢!

回答

2

一般来说,你应该做的第一,但他们大多在功能上是相同的。你可以把常量NSString的就像正常的NSString字符串对象,例如:

[@"Hello" length] 

将返回5.您可以将它们分配到的属性,一切只是工作。你可能会注意到的一点是,对于常量NSString,你不必担心保留/释放。这是因为它们实际映射到应用程序的只读数据部分,并没有分配内存。保留并释放针对他们的通话仍然有效,他们只是成为noops。

0
NSString *aString = @"Hello"; 

将创建一个autoreleased字符串。也就是说,如果你不明确retain它,它可能会在你的方法结束后消失(有时候完全没问题)。但是如果你想要坚持过去那段时间,你需要保留它。

如果你创建一个这样

@property (retain) NSString *aString; 

该字符串的属性,然后分配是这样的:

self.aString = @"Hello"; 

那么你已经正确保留了字符串,它会坚持围绕。

另一方面,使用alloc, init将为您创建一个保留数为1的字符串,如果您不需要它通过该方法,则应该为release它。

****编辑:@“你好”不是一个自动发布的字符串,正如其他人指出的那样。我的错。 ****

+0

这是不正确的。你不需要保留一个常量NSString。它不是创建自动发布的,它是NSString类集群的特殊子类,它不分配任何内存,因为它映射到程序的只读页面。 – 2009-07-31 02:11:55

+0

你没有看到我的编辑? – jbrennan 2009-07-31 02:48:08