在ARC中保留周期
甲保留周期是一个情况时对象A
保留对象B
和对象B
同时保留对象A
*。这里有一个例子:
@class Child;
@interface Parent : NSObject {
Child *child; // Instance variables are implicitly __strong
}
@end
@interface Child : NSObject {
Parent *parent;
}
@end
您可以修复使用__weak
变量或weak
属性你的“反向链接”保留ARC周期,即链接直接或对象层次间接父母:
@class Child;
@interface Parent : NSObject {
Child *child;
}
@end
@interface Child : NSObject {
__weak Parent *parent;
}
@end
*这是保留周期最原始的形式;可能会有一连串的物体互相留在一个圈内。
保留周期会导致ARC中的内存泄漏吗? – Raj
@Raj绝对!保留周期不是ARC特定的,它们会在ARC和非ARC场景中导致内存泄漏。 – dasblinkenlight
我们可以避免它们造成内存泄漏,正如我在@ Simon_Germain的回答中所解释的那样。 – trss
下面是一个保留周期:当两个对象保持彼此间的引用并被保留时,它会创建一个保留周期,因为两个对象都试图保留对方,从而无法释放。
@class classB;
@interface classA
@property (nonatomic, strong) classB *b;
@end
@class classA;
@interface classB
@property (nonatomic, strong) classA *a;
@end
为了避免保留周期与ARC,简单地声明它们中的一个与weak
参考,像这样:
@property (nonatomic, weak) classA *a;
僵尸不会因为保留周期的发生。 – bbum