以下行实际上是做什么的?
string = @"Some text";
假设在标题中声明了“字符串”:
NSString *string;
“=”在这里实际上做了什么?它对“字符串”的引用计数有什么作用?特别是,假设由于某种原因没有分配“字符串”,是否需要释放它?
谢谢!
以下行实际上是做什么的?
string = @"Some text";
假设在标题中声明了“字符串”:
NSString *string;
“=”在这里实际上做了什么?它对“字符串”的引用计数有什么作用?特别是,假设由于某种原因没有分配“字符串”,是否需要释放它?
谢谢!
任务就是这样。string
指针基本上是一个标签,指向内存中的特定地址。重新分配语句会将该标签指向内存中的另一个地址!
它不会改变引用计数或在 Objective-C 中做任何事情。如果您在非垃圾收集环境中运行,则需要自己维护引用计数:
[string release];
string = [@"Some text" retain];
但是,不需要管理字符串文字,因为它们是静态分配的,永远不会被释放!所以release
andretain
方法只是 NOOP(即没有操作)。您可以放心地忽略它们。
以下行实际上是做什么的?
string = @"Some text";
假设在标题中声明了“字符串”:
NSString *string;
“=”在这里实际上做了什么?它对“字符串”的引用计数有什么作用?
string
不是字符串。
string
事实上,它也不是任何其他类型的 Cocoa 对象。
string
是一个变量,你创建它是为了保存 NSString 的一个实例。赋值运算符将某些内容放入变量*。在上面的示例中,您创建了一个文字字符串,并将其放入变量中。
因为string
它是一个变量,而不是 Cocoa 对象,所以它没有引用计数。
在某处分配一个对象可以在垃圾收集代码中延长对象的生命周期(仅在 Mac 上)。有关更多详细信息,请参阅Cocoa 的内存管理编程指南。
*或一个 C 数组。不要将这些与 Cocoa 数组混淆;它们不可互换,并且您不能使用赋值运算符将事物放入 Cocoa 集合中(无论如何,在 Objective-C 中不行)。
当您在这种情况下使用文字时,它只是快速创建 NSString 对象的语法糖。一旦创建,对象的行为就像另一个对象一样。这里的区别是您的字符串被编译到程序中而不是动态创建。