什么时候应该retain使用?我知道它增加了对象引用计数,所以基本上该release对象的下一个不会调用dealloc它.好的,那又怎样?我读到这是一种惯例,如果你关心一个物体,你retain就是它.那里有什么例子吗?这是真的吗?
编辑:
我不是在寻找调试器告诉你这样做的时候.所以,我调查了这个.
用它来说,这是一个retain用法的例子
copy或retain.如果您是用户retain,那么您将获得该对象的所有权.release(因为保留时引用计数为1 + 1)或直接使用dealloc它是吗?我不这么认为,因为一个对象可以拥有多个所有者.所以对于最后一点,调用dealloc将真正"杀死"对象; 但是对于2 release,你不会是所有者,但创建它的程序仍然是,因此对象在某个地方仍然存在(泄漏?僵尸?)
我很困惑.
请建议解决iphone上内存泄漏问题的最佳方法.释放,自动释放,保留的最佳用途是什么,哪些适用于哪些情况?
我正在开发一款带有一系列迷你游戏的游戏.在一个游戏视图中,我有以下代码:
UIImage* img = [UIImage imageNamed:@"foo.png"];
someImage = CGImageRetain(img.CGImage);
[img release];
Run Code Online (Sandbox Code Playgroud)
someImage的类型为CGImageRef,这在第一次没有问题.在用户输掉迷你游戏(或退出)后,游戏和所有内容似乎都得到了正确的解除.然后,如果他们回到迷你游戏,并且游戏再次构建,那么该行:
someImage = CGImageRetain(img.CGImage);
Run Code Online (Sandbox Code Playgroud)
导致某种错误......几乎就像我的UIImage对象已经被释放了一样.我知道使用[UIImage imageNamed]有一些怪癖,但我根本无法追踪它.任何帮助将不胜感激 :)
我正在寻找好的解释.我有一本关于objective-c的1000页书籍,但不幸的是关于内存管理,保留计数的部分,描述得非常糟糕且难以理解.