我知道以下不需要手动释放(作为其自动释放):
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)
无需释放字符串文字 - 它不是自动释放的,但它也不是在该行创建的.字符串文字是一种特殊情况(是Objective-C中唯一的文字对象),它们忽略了释放它们的任何尝试.
rvc是一个局部变量,因此一旦MyMethod结束就会变得无法访问.没有必要将它设置为任何东西(它是零,而不是null).除了获取topViewController的地址并将其存储在局部变量中之外,您所做的任务不会执行任何操作.所以没有内存管理效果.
如果您使用"保留","Alloc","新建","复制"(RANC)之一,那么您就是该对象的所有者,并负责内存管理.你没有使用其中一个RANC字,因此你不需要发布.有关此问题的更多解释,请参见http://www.mobiledev.nl/memory-management-in-ios/.
| 归档时间: |
|
| 查看次数: |
3647 次 |
| 最近记录: |