什么时候应该使用retain?我知道它增加了对象引用计数,因此该对象上的下一个release不会对其调用dealloc。很好,那又怎样?我到处读到,这是一种惯例,如果你关心一个对象,你就会retain它。有这样的例子吗?这是真的吗?
编辑:
我不是在寻找调试器告诉你做那个或这个的时候。所以,我调查了这。
用我的话来说,下面是一个retain用法的例子
copy或retain。如果您使用retain,那么您将获得该对象的所有权。release (因为ref计数在保留时是1+1 ),或者直接在其上使用dealloc。是这样吗?我不这么认为,因为一个对象可以有多个所有者。因此,对于最后一点,调用dealloc将真正“杀死”对象;但是使用2 release,您将不会成为所有者,但是创建它的程序仍然是,因此对象在某个地方仍然是活动的(泄漏?僵尸?)
求你了我很困惑。
发布于 2010-12-15 14:03:54
您的所有答案都在内存管理指南中找到。
编辑
在编辑之后,这里有一些更具体的细节:
在您的代码中,您可以调用一个方法--一个返回您不拥有的对象的方法
因为你不拥有它,你无法控制它的一生。它可以在您仍然依赖于它是一个有效的对象时释放。
你用那个物体
永远不要确定它是否会存在。
然后你想释放它,=>,你不能,因为你不是主人
但你为什么要释放它?你不拥有这个对象,所以你不负责它的内存管理。
似乎您想要调用release,因为您认为这就是您管理内存的方式,而retain就是我们所称的。
它的工作方式如下:
alloc、new、copy或mutableCopy来接收该对象,那么您并不拥有该对象,因此您不必负责管理这个内存。retain。您现在拥有这个对象,并在将来的某个时候负责在它上调用release。现在关注对象的保留数是初学者的错误。不要这样。重要的是,您负责调用release。NSArray中,则数组将保留该对象。release。再来一次。不要担心对象的保留计数,或者其他对象使用该对象的情况。重要的是,您已经平衡了对retain的调用和对release的相同数量的调用。发布于 2010-12-15 14:04:20
当有必要时,我通常只显式地使用retain,Xcode调试器告诉我在出现这种情况时发生了什么。通常,不管出于什么原因(开发人员的管理不善,或者在幕后发布了一些版本),您对发布的对象做任何事情都会导致崩溃。只需在控制台上读取日志,调试时就可以看到Xcode上的调试器,并且您通常会发现是哪个对象导致了问题。
发布于 2010-12-15 14:29:40
Marcel,内存管理是开发iOS应用程序的关键。你应该像其他人建议的那样,阅读苹果的相关文档。
我可以在这里添加一些信息,试图帮助你满足你的需要。
使用Obj-C的内存管理过程是计数基.这意味着,每当您“保留”某个对象时,系统就会改进该对象的计数器。例如,如果您创建一个按钮并“保留”它,它将有一个值1。如果您再次保留它,它将有一个值2。要完全销毁这个对象,您需要释放它两次。当对象的值为0时,它将被销毁。
我个人的观点是:如果你想对你的应用程序的内存管理有一个很好的控制,最好是明确地保留和销毁你的对象,在可能的时候避免自动释放。再说一次,这是我个人的意见。我喜欢了解我的应用程序中的内存过程,这就是为什么我更喜欢精确地处理这个问题。
当然,这不是最好的方法,每个开发人员都会倾向于使用不同的方法来管理内存。
再次:花点时间阅读Abizem建议的文档。当然,你会对它有一个更好的理解。
https://stackoverflow.com/questions/4450644
复制相似问题