string = @"Some text";
假设“string”在头文件中这样声明:
NSString *string;
在这里,"="实际上是做什么的?它对"string"的引用计数有什么影响吗?特别是,假设由于某种原因没有将"string"分配给其他变量,那么它是否需要被释放?
谢谢!
string = @"Some text";
NSString *string;
在这里,"="实际上是做什么的?它对"string"的引用计数有什么影响吗?特别是,假设由于某种原因没有将"string"分配给其他变量,那么它是否需要被释放?
谢谢!
这个赋值语句只是简单地改变了指向内存中特定地址的标签,也就是 string
指针。重新赋值会将该标签指向内存中的另一个地址。
在 Objective-C 中,它不会改变引用计数或执行任何其他操作。如果你在非垃圾回收环境下运行程序,你需要手动维护引用计数:
[string release];
string = [@"Some text" retain];
然而,字符串字面值不需要被管理,因为它们被静态分配并永远不会被释放!因此,release
和retain
方法只是NOOP(即无操作)。您可以安全地省略它们。
What does the following line actually do?
string = @"Some text";
Assuming that "string" is declared thusly in the header:
NSString *string;
What does the "=" actually do here? What does it do to "string"'s reference count?
string
不是一个字符串。
string
实际上也不是任何其他类型的Cocoa对象。
string
是一个变量,您创建它来保存NSString的一个实例。赋值运算符将某些东西放入变量*中。在您上面的示例中,您创建了一个文字字符串,并将其放入变量中。
由于string
是一个变量,而不是Cocoa对象,因此它没有引用计数。
在垃圾回收代码中,将对象分配到某个位置可以延长对象的生命周期(仅适用于Mac)。有关详细信息,请参见Cocoa内存管理编程指南。
*或者C数组。不要将这些与Cocoa数组混淆;它们不可互换,并且您不能使用赋值运算符将内容放入Cocoa集合中(在Objective-C中无法)。