Objective C内存问题!

rag*_*ius 0 objective-c nsdictionary autorelease

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

   NSDictionary* last = [[arrHistory lastObject] autorelease];
   [arrHistory removeLastObject];
Run Code Online (Sandbox Code Playgroud)

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

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

Abi*_*ern 12

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

NSDictionary* last = [[arrHistory lastObject] retain];
[arrHistory removeLastObject];
Run Code Online (Sandbox Code Playgroud)

集合一旦被删除就会释放对象,这就是您需要发送retain消息以获取对象的原因.

  • 是的,但是已经取得了它的所有权,当你完成它时,你还需要发送一个`-release`或`-autorelease`-后者如果你从一个名字没有的方法返回它意味着所有权. (2认同)