回答
甲保留週期是一個情況時對象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;
這是迅速的,但這裏的保留週期的互動演示iOS中:https://github.com/nickm01/RetainCycleLoggerExample
- 1. ARC,塊和保留週期
- 2. iOS ARC塊保留週期
- 3. 網絡完成塊,遞歸和ARC保留週期
- 4. ARC保留週期出現更新至iOS 6.1
- 5. 在AFNetworking成功塊中保留週期
- 6. ARC與塊和保持週期
- 7. 會導致保留週期
- 8. 遞歸塊保留週期
- 9. 保留週期:「Parent-Child」
- 10. 通過AFNetworking保留週期
- 11. 保留週期關注
- 12. Cocos2d代表保留週期
- 13. 代表並保留週期?
- 14. 塊,自我,保留週期
- 15. 會有保留週期嗎?
- 16. 強與保留在ARC
- 17. 沒有保留週期,但爲什麼仍然有保留週期警告?
- 18. 保留週期中關閉涉嫌
- 19. 分配在非弧和保留週期
- 20. NSAttributedString initWithData:options:documentAttributes:error:documentAttributes不保留在ARC中
- 21. Objective-C塊的生命週期和保留週期
- 22. ARC圓形保留檢測
- 23. ios ARC力保留NSURL
- 24. dispatch_async和保留(非ARC)
- 25. 刪除節點導致保留週期
- 26. 保留週期CCAction和CCCallFunc/CCCallBlock
- 27. 這是一個保留週期嗎?
- 28. 這是一個保留週期(財產)?
- 29. 有時候保留週期好嗎?
- 30. 保留週期與核心數據
殭屍不會因爲保留週期的發生。 – bbum