是否有[自我保留]有效的情况?

时间:2012-01-17 11:42:31

标签: iphone objective-c ios

阅读我当前项目的源代码,我看到了:

[self retain]

在一个班级中,使用init方法。

我不明白原因。 从Apple读取内存管理规则,我没有看到任何相关内容,我没有看到任何假设的[self release]

6 个答案:

答案 0 :(得分:3)

对象在初始化时声明自己的所有权。我可以看到这可能有用的唯一原因是,如果对象需要保证它自己的存在,直到某个事件发生。例如,它可能会运行一个计时器,然后在计时器到期时自行释放。

如果没有记录并且没有相应的版本,则可能是一个错误。

答案 1 :(得分:2)

最好的猜测是编写代码的人有一个保留错误,这是对实际问题的“快速修复”。

答案 2 :(得分:1)

如果我没记错的话,有些课程会使用自我保留来避免过早发布。我会说这不是最好的练习,但是如果你知道游戏规则(在这种情况下是Obj-C),你可以打破它们(有时)。

答案 3 :(得分:1)

这似乎可能是一个错误,通常不能保留自己的对象。

我只看到一个特殊情况:委托和通知,你必须对你的生命周期更加小心,但即使这种情况,也不应该在对象本身中完成释放/保留。

注意Erick:

在UIAlert的情况下,你可以在它被销毁之前释放它,因为视图已经在视图hiercarchy中,然后被引用。因此,当视图从视图层次结构中删除时,视图将自动销毁

答案 4 :(得分:1)

保留self并没有错。但是用init方法看到它听起来很可疑。我想不出一个很好的例子,说明这将是一件好事。但是,使用ARC,你甚至不能这样做,所以你必须考虑一种更好的做事方式。一般来说,如果一个对象需要存活,那么就会有另一个对象持有它。自我保留物体容易出错,永远不会被释放。

答案 5 :(得分:-3)

如果你有一些物体,它就像是有了healts / life。当你创建它时,它有一个实时。和。函数'保留'增加他的生命数+1,释放函数减少他的生命数-1,dealloc减少,分配增加