iphone - 将指针引用更改为新对象并清理旧对象

时间:2010-10-29 10:51:39

标签: iphone memory-management memory-leaks

NSMutableArray *myArray = [[NSMutableArray alloc] init];
MyClass *obj1 = [[MyClass alloc] init];
[myArray addObject: obj1];

如果我想重用变量名,如何在这里清理旧的obj1引用。不破坏阵列中的任何东西。

obj1 = nil 

OR

[obj1 release];

//有什么区别?

obj1 = [[MyClass alloc] init];
[myArray addObject: obj1];

........... 继续使用obj1并添加数组。

2 个答案:

答案 0 :(得分:2)

nil分配给变量无效。您需要调用release以确保正确清理旧对象。

BTW,在代码块a中重用变量名通常是一个坏主意。

答案 1 :(得分:1)

当您向数组添加对象时,数组存储变量地址,因此您可以自由地使用临时变量(obj1)来创建另一个对象 - 数组中的值不会被销毁。

但是由于数组保留了用于正确内存管理的元素,因此在将其推送到数组后需要释放obj1。所以你需要[obj1 release];