【发布时间】:2013-01-14 10:43:50
【问题描述】:
免责声明:我对 Objective-C 很陌生
我在一个命令行项目中 ARC 未启用
我有一个名为 MyClass 的类
@interface MyClass : NSObject
@end
@implementation MyClass
@end
我的主要看起来像
int main(int argc, char *argv[])
{
MyClass *first = [MyClass new];
MyClass *second = first;
return 0;
}
问题:
我知道 *first 的保留计数为 1。但我不知道 了解为什么 *second 也保留计数 = 1?我没有 在该对象上完成新建、保留、分配或复制。
由于 *first 的保留计数为 1,我是否必须调用 release on 那?正如您在代码中看到的,我必须释放对象,但性能分析器显示没有内存泄漏。为什么?
我注意到 *first 和 *second 的值相同 内存地址。然后我想 *first 保留计数应该 分配时增加到2。但它没有,为什么?
-
我注意到当我保留 *first 并将其分配给 *second 它们的保留数均为 2(见下文)
int main(int argc, char *argv[]) { MyClass *first = [MyClass new]; [first retain]; MyClass *second = first; return 0; }所以基本上 *second 在这种情况下变成 *first 的副本 什么时候发布?
-
如果我更改了两个指针的保留计数会发生什么 代码
int main(int argc, char *argv[]) { MyClass *first = [MyClass new]; MyClass *second = first; [first retain]; return 0; }我的意思是 *second 保留计数也会增加吗?
提前谢谢你。
【问题讨论】:
-
请注意,在推理内存管理时,绝对保留计数是无用的。考虑增量。 Www.whentouseretaincount.com 有(狡猾的)详细信息。
-
@bbum 但在学习和调试时理解它们仍然是必不可少的。
-
是的,@justinmeiners,必须了解绝对保留计数是无用的以及为什么(包括对调试无用)。因为它在实际代码中从未发生过的人为示例之外毫无用处。
标签: objective-c pointers memory-leaks retaincount