0

我真的对 NSStrings 感到困惑。比如我应该什么时候做

NSString *aString = @"Hello";

应该是:

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

但是,当您为 NSString 属性分配值时,它会有所不同,不是吗?有人可以帮我解决这个问题吗?

谢谢!!

4

2 回答 2

2

一般来说,你应该做第一个,但它们在功能上大部分是相同的。你可以像对待普通的 NSString 字符串对象一样对待常量 NSStrings,例如:

[@"Hello" length]

将返回 5。您可以将它们分配给属性,一切正常。您可能会注意到的一件事是,使用常量 NSStrings 您不必担心保留/释放。那是因为它们实际上被映射到应用程序的只读数据部分,并且没有分配内存。保留和释放针对它们的调用仍然有效,它们只是变成了无用的。

于 2009-07-31T02:09:30.977 回答
0
NSString *aString = @"Hello";

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

如果您像这样为该字符串创建一个属性

@property (retain) NSString *aString;

然后像这样分配:

self.aString = @"Hello";

然后你已经正确地保留了字符串,它会一直存在。

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

****编辑:@"Hello" 不是自动发布的字符串,正如其他人指出的那样。我的错。****

于 2009-07-31T02:09:24.270 回答