Objective C内存问题!

时间:2011-06-19 09:46:24

标签: objective-c nsdictionary autorelease

我在以下两个代码行中遇到问题

   NSDictionary* last = [[arrHistory lastObject] autorelease];
   [arrHistory removeLastObject];

在调试器中我可以看到,在执行第一个代码行之后,last指向具有值对的字典(应该如此)。

问题是第二个代码行。它接缝破坏字典的内容。我认为第1行的autorelease可以解决这个问题但是,它不是。

2 个答案:

答案 0 :(得分:12)

您需要做的是向对象发送retain消息。

NSDictionary* last = [[arrHistory lastObject] retain];
[arrHistory removeLastObject];

集合在删除后会释放对象,这就是您需要发送retain消息以获取其所有权的原因。

答案 1 :(得分:0)

arrHistory拥有其成员,在取得其所有权之前,不应致电其成员的release / autorelease

如果要在删除后使用最后一个对象,可以这样做:

NSDictionary* last = [[arrHistory lastObject] retain] autorelease];