Bin*_*ian 11 memory-management objective-c autorelease
鉴于此代码:
// Initialize string
NSString *name = @"Franzi";
Run Code Online (Sandbox Code Playgroud)
@""宏创建一个带有给定文本的NSString(这里名称为Franzi)和一个RETAIN COUNT OF 1?
所以@""给出了一个必须被释放的NSString?我对这个对象负责吗?第二个代码示例然后让我感到困惑,即使我这样使用它:
NSSting *message;
message = [NSString stringWithFormat:@"Hello @%!",name];
//message = [NSString stringWithFormat:@"Hello Girl!"];
Run Code Online (Sandbox Code Playgroud)
因此消息在下一个运行循环中释放,k.但是作为stringWithFormat的参数给出的NSString是什么?
类对象NSString是否释放了作为争论的NSString @"Hello%@"/ @"Hello Girl"?或@"" - Konstruktor只回馈自动释放的NSStrings?
Bol*_*ock 22
该NSString
文字符号@""
给你编译时驻留在自己的内存空间,并有固定的地址常量字符串.
与流行的看法相反,您不释放文字字符串的原因不是因为它们是自动释放池的一部分.它们不是 - 相反,它们将整个应用程序的生命周期花在它们在编译时分配的相同内存空间中,并且永远不会在运行时释放.它们仅在应用程序进程终止时被删除.
也就是说,你需要内存管理常量NSString
s 的唯一时间是你自己保留或复制它们.在这种情况下,您应该释放保留或复制的指针,就像您执行任何其他对象一样.
另一件事:文字本身不需要内存管理.但是如果你将它们作为参数传递给NSString
方便方法或初始化器,就像你一样stringWithFormat:
,那么通常是遵循所有内存管理规则的方法和初始化器返回的那些对象.
归档时间: |
|
查看次数: |
2042 次 |
最近记录: |