Objective-C内存管理问题

时间:2011-01-05 11:02:39

标签: objective-c memory-management

好的,如果我有这个:

NSString *lastPushed = (NSString *)[tagStack objectAtIndex:[tagStack count]-1];
.//do something with the last pushed element locally
.//do more cstuff here
.//after doing all the stuff needed in the function

[lastPushed release];

其中tagStack是NSMutableArray

如果我发布了lastPushed,因为它没有被复制或者被引入,它是否只会释放这个引用,还是会实际释放mutableArray中的对象?

3 个答案:

答案 0 :(得分:5)

您没有allocnewcopymutableCopy lastPushed,为什么要发布它?

由于lastPushed是指向数组中对象的指针,因此您将释放它。当你的数组认为它有一个指向某个对象的有效指针但你已经释放它并且它已被dealloc编辑时,这个可能会导致一个问题。

答案 1 :(得分:4)

它将释放数组中的对象,因为lastPushed和数组都指向同一个对象

与往常一样,您应遵循管理规则。不要发布任何未创建,保留或复制的内容。

答案 2 :(得分:2)

您不应该发布lastPushed,因为您没有使用alloccopynew。 (就这么简单。)

如果你想从可变数组中删除它,你应该使用NSMutableArrayremoveObjectremoveObjectAtIndex等)中的相应方法。否则,你不清楚你是什么重新尝试这样做会在下周/月/年等时咬你。