我真的对 NSStrings 感到困惑。比如我应该什么时候做
NSString *aString = @"Hello";
应该是:
NSString *aString = [[NSString alloc] initWithString:@"Hello"];
但是,当您为 NSString 属性分配值时,它会有所不同,不是吗?有人可以帮我解决这个问题吗?
谢谢!!
我真的对 NSStrings 感到困惑。比如我应该什么时候做
NSString *aString = @"Hello";
应该是:
NSString *aString = [[NSString alloc] initWithString:@"Hello"];
但是,当您为 NSString 属性分配值时,它会有所不同,不是吗?有人可以帮我解决这个问题吗?
谢谢!!
一般来说,你应该做第一个,但它们在功能上大部分是相同的。你可以像对待普通的 NSString 字符串对象一样对待常量 NSStrings,例如:
[@"Hello" length]
将返回 5。您可以将它们分配给属性,一切正常。您可能会注意到的一件事是,使用常量 NSStrings 您不必担心保留/释放。那是因为它们实际上被映射到应用程序的只读数据部分,并且没有分配内存。保留和释放针对它们的调用仍然有效,它们只是变成了无用的。
NSString *aString = @"Hello";
将创建一个autoreleased
字符串。也就是说,如果您没有明确说明retain
它,它可能会在您的方法结束后消失(有时这完全没问题)。但是,如果您想在那个时间之后保留它,则需要保留它。
如果您像这样为该字符串创建一个属性
@property (retain) NSString *aString;
然后像这样分配:
self.aString = @"Hello";
然后你已经正确地保留了字符串,它会一直存在。
另一方面, usingalloc, init
将为您创建一个保留计数为 1 的字符串,如果您不需要它通过该方法,则应该release
使用它。
****编辑:@"Hello" 不是自动发布的字符串,正如其他人指出的那样。我的错。****