任何人都可以用示例代码(目标C)解释保留周期吗?我们如何删除保留周期?(带代码)

时间:2010-09-03 09:20:31

标签: iphone

任何人都可以用示例代码(目标C)解释保留周期吗?我们如何删除保留周期?(带代码或图表)。我从理论上讲它,但我从未遇到过这样的程序?我很好奇,如何保留周期解决(使用代码或图表)?

2 个答案:

答案 0 :(得分:6)

委托是一个示例,您必须通过在委托属性上使用assign属性来避免保留周期。例如,您有一个创建子项的父对象:

self.child = [[[Child alloc] init] autorelease];

因此父级具有对子级的保留引用(因为属性setter保留了它)。

现在,父级将自己设置为子级的委托:

self.child.delegate = self;

现在,如果孩子保留其delegate属性,则会有一个保留周期。两者都包含对另一个的引用,无法解除分配。

为避免这种情况,子项使用assign属性声明delegate属性:

@property (nonatomic, assign) id delegate;

这是安全的,因为委托人几乎总是比委托人长。如果没有,父母应该在孩子离开之前将孩子的代表设置为nil。

答案 1 :(得分:2)

Objective-C的内存管理方面在很多地方都有很好的涵盖。

一些参考文献:

  1. http://www.otierney.net/objective-c.html#memorymanagement
  2. http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html
  3. 如果你有不确定的特定解决方案,你可以考虑回到这里,以便我们有具体的例子来评论。你发布你的代码,不要犹豫,如果你害怕它可能看起来非常愚蠢或充满错误。这是最好的学习方式。