任何人都可以用示例代码(目标C)解释保留周期吗?我们如何删除保留周期?(带代码或图表)。我从理论上讲它,但我从未遇到过这样的程序?我很好奇,如何保留周期解决(使用代码或图表)?
答案 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的内存管理方面在很多地方都有很好的涵盖。
一些参考文献:
如果你有不确定的特定解决方案,你可以考虑回到这里,以便我们有具体的例子来评论。你发布你的代码,不要犹豫,如果你害怕它可能看起来非常愚蠢或充满错误。这是最好的学习方式。