Ios 用真实世界的例子解释目标C保留周期?

Ios 用真实世界的例子解释目标C保留周期?,ios,objective-c,retain-cycle,Ios,Objective C,Retain Cycle,我正在阅读关于保留循环的文章,“保留循环可以有几种形式,但它通常意味着对象A保留对象B,对象B保留对象A,但没有其他东西保留对象A或B”。但我不清楚这个概念。请任何人用真实世界的例子来解释这个循环 谢谢。保留周期是指对象“第一”保留对象“第二”,对象“第二”同时保留对象“第一”的情况*。以下是一个例子: @class Second; @interface First : NSObject { Second *second; // Instance variables are implicitly

我正在阅读关于保留循环的文章,“保留循环可以有几种形式,但它通常意味着对象A保留对象B,对象B保留对象A,但没有其他东西保留对象A或B”。但我不清楚这个概念。请任何人用真实世界的例子来解释这个循环


谢谢。

保留周期是指对象“第一”保留对象“第二”,对象“第二”同时保留对象“第一”的情况*。以下是一个例子:

@class Second;
@interface First : NSObject {
Second *second; // Instance variables are implicitly __strong
}
@end

@interface Second : NSObject {
First *first;
}
@end
通过为“反向链接”(即指向对象层次结构中直接或间接父对象的链接)使用_弱变量或弱属性,可以修复ARC中的保留周期:

__weak First *first;

一个简单的例子,一个人住在一个部门,一个部门有一个人(假设有一个人)

那就这样说吧

- (void)viewDidLoad {
    [super viewDidLoad];
    Person * person = [[Person alloc] init];
    Department * department = [[Department alloc] init];
    person.department = department;
    department.person = person;
}
您将不会看到dealloc日志,这是保留循环


保留周期可被视为死锁。如果你找不到一个很好的保留周期的例子,那就找一个死锁的例子。保留周期是关于objective-c管理中的内存的,我们知道。如果你想用一个真实的例子来了解这个过程。以一个1000人和10支钢笔的大厅里填写的表格为例。你能解释一下实现方法吗。
- (void)viewDidLoad {
    [super viewDidLoad];
    Person * person = [[Person alloc] init];
    Department * department = [[Department alloc] init];
    person.department = department;
    department.person = person;
}