我有一些像这样的代码:我们可以在Objective-c中释放一些变量不拥有但指向的内存吗?
NSObject *var1 = [[NSObject alloc] init];
NSObject *var2 = var1;
[var2 release];
var1 = nil;
这是正确的还是这是一个内存泄漏? 据我所知只有VAR1可以释放内存的alloc-inited在第一线,为每Object Ownership policy
我有一些像这样的代码:我们可以在Objective-c中释放一些变量不拥有但指向的内存吗?
NSObject *var1 = [[NSObject alloc] init];
NSObject *var2 = var1;
[var2 release];
var1 = nil;
这是正确的还是这是一个内存泄漏? 据我所知只有VAR1可以释放内存的alloc-inited在第一线,为每Object Ownership policy
您的代码将释放内存,因为有一个单页头,和一个版本 - 中金额指针到对象不是一个因素。
所有权是概念,大约因为如果你跟着它可以更容易地管理和最终防止与释放的东西,你不应该释放问题的指导方针Object Ownership policy会谈(或没有释放的东西,你应该)。
你的示例将不会导致内存泄漏作为var1
和var2
指向同一个对象在内存因此alloc
呼叫具有匹配release
。如果NSObject
保留,因为它被分配到然而var2
,就不会有因为将没有匹配release
内存泄漏。
当关于所有权的概念存储器管理导向会谈,它并不意味着一个变量(例如var1
)拥有的对象;它更多的是关于“范围”所拥有的(例如类或方法)。在你的例子中,包含这些语句的方法将负责释放该对象。
你的代码是所有权利不漏。但是看起来你并不是很了解指针。指针不能拥有另一个对象,它只是一个参考,它告诉计算机正在访问哪个对象。在Cocoa的引用计数内存模型中,根本没有多少指针指向单个对象。
你真的应该学习C(尤其是关于指针),你尝试学习Objective-C之前。
这是保持一个引用计数,而不是指向对象的对象。如果你有十几个指向对象的指针,你可以使用它们中的任何一个来释放对象,因为它们都指向同一个对象。但是,如果你不玩这些类型的游戏,那么遵循你的代码会更容易,并且确保你没有内存管理问题。
是的,谢谢。正是我想知道的 – 2011-03-31 11:09:25