Objective c 将文字字符串分配给NSString时使用的是什么=&引用;真的吗?

Objective c 将文字字符串分配给NSString时使用的是什么=&引用;真的吗?,objective-c,cocoa,variable-assignment,string-literals,reference-counting,Objective C,Cocoa,Variable Assignment,String Literals,Reference Counting,下面这一行实际上是做什么的 string = @"Some text"; string = @"Some text"; 假设在报头中声明了“string”: NSString *string; NSString *string; “=”在这里实际做什么?它对“string”的引用计数有什么影响?特别是,假设出于某种原因“string”没有被分配到其他位置,是否需要释放它 谢谢 作业就是这样。字符串指针基本上是指向内存中特定地址的标签。重新分配语句会将该标签指向内存中的另一个地址 它不会更

下面这一行实际上是做什么的

string = @"Some text";
string = @"Some text";
假设在报头中声明了“string”:

NSString *string;
NSString *string;
“=”在这里实际做什么?它对“string”的引用计数有什么影响?特别是,假设出于某种原因“string”没有被分配到其他位置,是否需要释放它


谢谢

作业就是这样。
字符串
指针基本上是指向内存中特定地址的标签。重新分配语句会将该标签指向内存中的另一个地址

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

[string release];
string = [@"Some text" retain];

但是,字符串文本不需要管理,因为它们是静态分配的,永远不会被释放!因此
release
retain
方法只是NOOPs(即没有操作)。您可以安全地省略它们。

在本例中使用类似的文本时,快速创建NSString对象只是一种语法上的糖分。创建后,对象的行为与其他对象一样。这里的区别是字符串被编译到程序中,而不是动态创建

下面这一行实际上是做什么的

string = @"Some text";
string = @"Some text";
假设在报头中声明了“string”:

NSString *string;
NSString *string;
“=”在这里实际做什么?它对“string”的引用计数有什么影响

string
不是字符串

string
实际上也不是任何其他类型的Cocoa对象

string
是一个变量,您创建它是为了保存NSString的实例。赋值运算符将某物放入变量*。在上面的示例中,您创建了一个文本字符串,并将其放入变量中

由于
string
是一个变量,而不是Cocoa对象,因此它没有引用计数

在垃圾收集代码中(仅在Mac上)将对象分配到某个位置可以延长对象的生命周期。有关更多详细信息,请参阅


*或者一个C数组。不要将它们与Cocoa数组混淆;它们是不可互换的,您不能使用赋值运算符将内容放入Cocoa集合中(无论如何,Objective-C中不能)。

谢谢!这就是我对指针赋值的期望。。。啊,那么赋值后的“-1”保留计数(即[string retainCount])是一个标志,指示“string”指向一个字符串文字,因此不需要管理,但可以安全释放?赋值后的“retain count”为-1表示您永远不应该注意任何对象的绝对保留计数。如果你保留它,你应该释放它。仅此而已。@“”字符串不需要retain/release是一个实现细节,从技术上讲,不应该依赖它。然而,如果实施发生变化,每个人都会这样做,一切都会破裂。