将文字字符串分配给带有"="的NSString实际上做了什么?

not*_*ame 8 cocoa reference-counting objective-c variable-assignment string-literals

以下行实际上做了什么?

string = @"Some text";
Run Code Online (Sandbox Code Playgroud)

假设在字段中声明了"string":

NSString *string;
Run Code Online (Sandbox Code Playgroud)

"="实际上在这里做了什么?它对"字符串"的引用计数有什么作用?特别是,假设由于某种原因"字符串"没有另外分配,是否需要释放?

谢谢!

not*_*oop 20

任务就是这样.该string指针基本上是指向特定的地址在内存的标签.重新分配语句会将该标签指向内存中的另一个地址!

它不会更改引用计数或在Objective-C中执行任何操作.如果您在非垃圾收集环境中运行,则需要自己维护引用计数:

[string release];
string = [@"Some text" retain];
Run Code Online (Sandbox Code Playgroud)

但是,不需要管理字符串文字,因为它们是静态分配的,永远不会被释放!所以releaseretain方法只是NOOP(即没有操作).你可以安全地省略它们.

  • 赋值后的"保留计数"为-1表示您永远不应该注意任何对象的绝对保留计数.如果你保留它,你应该释放它.就这些.@""字符串不需要保留/释放是一个实现细节,从技术上讲,不应该依赖它.但是,如果实施要改变,每个人都会这样做,一切都会破裂. (5认同)