这是我的代码:
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/