class 可以包含对自身的引用变量吗?

Can a class contain a reference variable to itself?

我可以有一个 "Person" class 有一个 "bestFriend" 类型的 "Person" 变量吗?如果是这样,如何防止发生强引用循环?我可以正常声明变量,但是当我尝试将 at 声明为 weak 或 unowned 时出现错误。

class Person: NSManagedObject {
    @NSManaged var name:String?
    @NSManaged var age:Int?
    @NSManaged var bestFriend:Person?
}

如果我尝试像这样声明变量:

@NSManaged weak var bestFriend:Person? //This generates an error

@NSManaged unowned var bestFriend:Person? //This generates an error

错误 -"property 'bestFriend' is marked weak on class Person. Cannot generate a setter method for it."

更新

class 现在是 NSManagedObject 的子class,所以我可以使用 CoreData 存储它。我稍微更改了代码以反映这一点。同样的问题仍然存在。如何防止强引用循环的发生?我无法在不生成上面列出的错误的情况下将 "bestFriend" 变量声明为 "weak" 或 "unowned"。

Person 是 NSManagedObject 的子类型吗?如果是这样,是的,属性必须很强。这会导致强引用循环。你必须专门打破它们:

Breaking Strong References Between Objects

As opposed to the default behavior between managed objects and their managed object contexts, with relationships between managed objects, each object maintains a strong reference to the object or objects to which it is related. This relationship can cause strong reference cycles which in turn can cause objects to be held in memory long past their usefulness. To ensure that reference cycles are broken, when you are finished with an object, you can use the managed object context method refreshObject:mergeChanges: to turn the managed object into a fault.

(来自CoreData Programming Guide)。