在我的Cocoa Mac应用程序中,我有一个实例A
,其中包含一组无序的实例B
,而这些实例又有一组有序的实例C
。 C
的实例只能在一个实例B
和B
中仅在一个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用于此应用。
答案 0 :(得分:1)
如果A
有一组B
个对象,并且每个B
对象都有一组C
个对象,则可以执行以下操作:
NSSet * allCObjectsInA = [anAObject valueForKeyPath:@"bObjects.@distinctUnionOfSets.cObjects"];
这假设您可以通过名为A
的方法访问B
的{{1}}个对象,并使用{- (NSSet *) bObjects;
B
个C
个对象1}}
答案 1 :(得分:0)
如果你真的不需要优化你的代码,你就不应该为缓存烦恼:每当你需要你的集合时,枚举B的所有实例。