Sag*_*ari 2 iphone memory-management objective-c nsstring
这是我的代码:
NSString *xyz=[NSString stringWithFormat:@"%i %@",10,@"Sagar"];
Run Code Online (Sandbox Code Playgroud)
现在我正在采取其他字符串,如下所示.
NSString *x2=[xyz copy];
Run Code Online (Sandbox Code Playgroud)
我不知道到底会发生什么?是这样的,x2有xyz的ref的参考吗?
NSString *x3=[xyz retain];
Run Code Online (Sandbox Code Playgroud)
这里会发生什么,x3有一个新的内存有复制的字符串或[xyz copy]吗?
现在,如何从内存中删除所有这三个字符串?
NSString *xyz=[NSString stringWithFormat:@"%i %@",10,@"Sagar"];
Run Code Online (Sandbox Code Playgroud)
这将创建自动释放的NSString实例 - 它将在自动释放池耗尽时释放(通常在下一个运行循环中).
NSString *x2 = [xyz copy];
Run Code Online (Sandbox Code Playgroud)
理论上,-copy消息将创建一个具有保留计数1的对象的新实例(即必须将其释放到某处),但由于NSString对象是不可变的,因此[xyz copy]将优化为[xyz retain],因此它将指向相同的实例.
NSString *x3=[xyz retain];
Run Code Online (Sandbox Code Playgroud)
x3将指向与xyz(和x2)相同的实例,并且其保留计数将递增 - 您必须在某处释放您的对象.
现在,如何从内存中删除所有这三个字符串?
确保将所有保留(复制)消息与释放和内存配对将被释放.
阅读Objective-c内存管理指南以获取更多详细信息.
| 归档时间: |
|
| 查看次数: |
922 次 |
| 最近记录: |