如何在Cocoa模型中有效地从更深层次获取所有实例?

时间:2010-03-19 09:05:14

标签: objective-c cocoa macos

在我的Cocoa Mac应用程序中,我有一个实例A,其中包含一组无序的实例B,而这些实例又有一组有序的实例CC的实例只能在一个实例BB中仅在一个A中。

我希望在实例C上提供一组无序的所有实例A。我可以每次枚举所有实例B,但这对于我经常需要做的事情来说似乎很昂贵。但是,我有点担心跟踪C中的A实例可能会变得很麻烦,并且会导致不一致,例如,如果C实例被B删除但不是来自A

解决方案1 ​​ - 在NSMutableSet中使用A并在C中执行相同操作时添加或删除B个实例。

解决方案2 - 在NSHashTable中使用弱引用的A。从C删除B时,A也会消失A

解决方案3 - 使用B中的键值观察来跟踪NSMutableSet中的更改,并相应地更新A中的B

解决方案4 - 只需迭代所有实例{{1}},即可在需要时创建集合。

哪种方式最好?我错过了其他任何方法吗?

注意我不会也不会将CoreData用于此应用。

2 个答案:

答案 0 :(得分:1)

如果A有一组B个对象,并且每个B对象都有一组C个对象,则可以执行以下操作:

NSSet * allCObjectsInA = [anAObject valueForKeyPath:@"bObjects.@distinctUnionOfSets.cObjects"];

这假设您可以通过名为A的方法访问B的{​​{1}}个对象,并使用{- (NSSet *) bObjects; BC个对象1}}

答案 1 :(得分:0)

如果你真的不需要优化你的代码,你就不应该为缓存烦恼:每当你需要你的集合时,枚举B的所有实例。