iphone - NSString基础知识-内存-保留-复制

标签 iphone objective-c memory-management nsstring

这是我的代码:

NSString *xyz=[NSString stringWithFormat:@"%i %@",10,@"Sagar"];

现在我正在采用其他字符串,如下所示。

NSString *x2=[xyz copy];

我不知道这里会发生什么?是不是像 x2 具有 xyz 的 ref 的 ref?

NSString *x3=[xyz retain];

这里会发生什么,x3 有一个复制了字符串的新内存,或者 [xyz copy] 是这样吗?

现在,如何从内存中删除所有这三个字符串?

最佳答案

NSString *xyz=[NSString stringWithFormat:@"%i %@",10,@"Sagar"];

这将创建 NSString 的自动释放实例 - 当自动释放池耗尽时(通常在下一个运行循环)它将被释放。

NSString *x2 = [xyz copy];

理论上 -copy 消息将创建一个保留计数为 1 的对象的新实例(也就是说,您必须在某个地方释放它),但由于 NSString 对象是不可变的,因此 [xyz copy] 将是优化为 [xyz keep],因此它将指向同一个实例。

NSString *x3=[xyz retain];

x3 将指向与 xyz(和 x2)相同的实例,并且其保留计数将增加 - 您必须在某处释放对象。

Now, how to remove all these three strings from memory?

确保将所有保留(复制)消息与释放配对,并且内存将被释放。
阅读 Objective-c memory management guide了解更多详情。

关于iphone - NSString基础知识-内存-保留-复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2183175/

相关文章:

iphone - 当方向改变时更改或禁用 iPhone 旋转动画

ios - 如何通过 objective-c (对于对话页面)增加表格 View 中的标签或 TextView 大小(高度和宽度)你能帮帮我吗?

ios - 从另一个类 objc 访问变量

iphone - 如何在我使用 NSClassFromString 动态创建的类中调用方法?

data-structures - 栈和堆是什么以及在哪里?

php - 在 PHP 中调试内存泄漏/使用错误的工具/技术

iphone - NSFileManager 多实例写入原子性

ios - 如何在 iOS 中播放 .h264

caching - 内层缓存可以写回包容性外层缓存吗?

iphone - Objective-C - 将变量保留在 .h 或 .m 中 - 有什么区别吗?