1

我有一些这样的代码:

NSObject *var1 = [[NSObject alloc] init];
NSObject *var2 = var1;
[var2 release]; 

var1 = nil;

这是正确的还是内存泄漏?据我所知,根据对象所有权政策,只有 var1 可以释放第一行中分配的内存

4

4 回答 4

2

您的代码释放内存,因为只有一个分配和一个释放 - 指向对象的指针数量不是一个因素。

所有权是对象所有权政策所讨论的一个概念,因为如果您遵循指南,它将更容易管理并最终防止与发布您不应该发布的内容(或不发布您应该发布的内容)相关的问题。

于 2011-03-31T10:54:19.780 回答
0

您的示例不会导致内存泄漏,因为var1var2指向内存中的同一对象,因此该alloc调用具有匹配的release. 但是,如果NSObject保留了分配给它的位置var2,则会出现内存泄漏,因为没有匹配release的 。

当内存管理指南谈到所有权的概念时,它并不意味着一个变量(例如var1)拥有一个对象。它更多的是关于“范围”拥有它(例如类或方法)。在您的示例中,包含这些语句的方法将负责释放对象。

于 2011-03-31T11:01:55.930 回答
0

你的代码没问题,不会泄漏。但似乎您并不真正了解指针。指针不能拥有另一个对象,它只是告诉计算机正在访问哪个对象的引用。在 Cocoa 的引用计数内存模型中,有多少指针指向单个对象并不重要。

在你尝试学习 Objective-C 之前,你真的应该学习 C(尤其是指针)。

于 2011-03-31T11:03:07.063 回答
0

保持引用计数的是对象,而不是指向对象的指针。如果您有十几个指向一个对象的指针,您可以使用其中任何一个来释放该对象,因为它们都指向同一个对象。但是,如果您不玩这类游戏,那么遵循您的代码并确保您没有内存管理问题要容易得多。

于 2011-03-31T11:09:06.553 回答