我很好奇以下代码的内存分配。
NSString *myString = [NSString string];
我知道这会创建一个自动释放的空字符串@""
当我打电话
时会发生什么myString = @"Hello world";
我的引用是否与提供的自动释放对象NSString
相同,或者我只是分配了一个我负责释放的新对象?
答案 0 :(得分:8)
当想知道你是否拥有一个物体时,问问自己:
我用来创建这个对象的方法......
new
?alloc
?copy
?retain
?如果您对其中任何一个回答“是”,那么您有责任在返回的对象上调用release
或autorelease
。 (请注意,Core Foundation对象的规则略有不同。另请注意,文档明确说明与此相矛盾的任何内容都会获胜。文档始终取代指南)
对于您的字符串,您所有问题的答案都是“否”,因此您不对该对象负责。常量字符串(样式@"foo"
)被硬编码到应用程序二进制文件中,并且不能被释放。然而,这是一个实现细节。只要遵循内存管理规则,你就会很好!