阅读我当前项目的源代码,我看到了:
[self retain]
在一个班级中,使用init
方法。
我不明白原因。
从Apple读取内存管理规则,我没有看到任何相关内容,我没有看到任何假设的[self release]
。
答案 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减少,分配增加