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