iOS内存管理:是否发布字符串?

Pom*_*air 2 objective-c ios

我知道以下不需要手动释放(作为其自动释放):

NSString* str1 = [NSString string];
Run Code Online (Sandbox Code Playgroud)

这需要手动发布:

NSString* str2 = [[NSString alloc] init];
[string2 release];
Run Code Online (Sandbox Code Playgroud)

但是这个怎么样?是自动释放还是不自动释放?

NSString* str3 = @"Example string";
Run Code Online (Sandbox Code Playgroud)

最后,看看下面的代码片段:如果我已正确理解iOS内存管理,那么释放RootViewController引用'rvc'将清除该对象,因此它不会在代码中的其他地方使用 - 我不想要那.但是,我应该至少将引用设置为null吗?或者我可以在代码中保留这些引用而不会导致内存泄漏吗?

- (void)myMethod
{
RootViewController *rvc = (RootViewController *)navigationController.topViewController;
// using rvc somehow...
// ...but should I set it to null?
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*mmy 6

无需释放字符串文字 - 它不是自动释放的,但它也不是在该行创建的.字符串文字是一种特殊情况(是Objective-C中唯一的文字对象),它们忽略了释放它们的任何尝试.

rvc是一个局部变量,因此一旦MyMethod结束就会变得无法访问.没有必要将它设置为任何东西(它是零,而不是null).除了获取topViewController的地址并将其存储在局部变量中之外,您所做的任务不会执行任何操作.所以没有内存管理效果.


Mob*_*.nl 5

如果您使用"保留","Alloc","新建","复制"(RANC)之一,那么您就是该对象的所有者,并负责内存管理.你没有使用其中一个RANC字,因此你不需要发布.有关此问题的更多解释,请参见http://www.mobiledev.nl/memory-management-in-ios/.