我是否需要在Obj-C中发布id?

时间:2011-05-23 15:46:14

标签: objective-c ios memory-management

示例:

MyClass *funkStation = [[MyClass alloc] init];
[funkStation dance];
id tmp = funkStation;
...
[funckStation release];

我知道在完成funkStation对象后我需要释放它,但是id tmp怎么样? 我认为它不是原始对象的副本,而只是指向内存空间的指针。

3 个答案:

答案 0 :(得分:4)

这是正确的。您只发布funkStation,但不发布tmp

tmp只有在你给它一个保留指针或原始对象的副本时才会被释放:

id tmp = [funkStation retain];

答案 1 :(得分:0)

如果使用alloc显式分配对象,则需要释放它。 与副本相同。

ID是一个指针,所以当你指定它时,它只分配指针值,所以你不需要释放这两个变量,因为它们都会引用同一个对象。如果你这样做,你肯定会遇到段错误。

答案 2 :(得分:0)

tmp和funkstation指的是同一个对象。您只需要释放一次此对象。发送到funkstation和tmp的发布做同样的事情。