我很好奇以下代码的内存分配。
NSString *myString = [NSString string];
我知道这将创建一个自动释放的空字符串,@""
当我打电话时会发生什么
myString = @"Hello world";
我的引用是否与提供的自动释放对象NSString
相同,或者我只是分配了一个我负责释放的新对象?
最佳答案
当想知道您是否拥有某个对象时,问问自己:
我用来创建这个对象的方法...
- 以
new
开头? - 以
alloc
开头? - 包含
副本
? - 等于
保留
?
如果您对其中任何一个问题回答"is",那么您有责任对返回的对象调用 release
或 autorelease
。 (请注意,核心基础对象的规则略有不同。另请注意,文档明确指出与此相矛盾的任何内容均获胜。文档始终取代指南)
就您的字符串而言,您所有问题的答案都是“否”,因此您不对该对象负责。常量字符串(@"foo"
样式)被硬编码到应用程序二进制文件中,并且无法被释放。然而,这是一个实现细节。只要遵循内存管理规则,就可以了!
关于objective-c - @"Strings"在内存中是如何分配的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4436016/