2011-08-24 110 views
2

我的情况是我有两个类:“人”和“组”。 在每个人身上,它都有一个NSArray来恢复它所属的每个组。 在每个小组中,它都有一个NSAraay,可以恢复每个人的属性。如何在处理NSArray(默认保留对象)时避免保留周期?

而且一个人可以属于多个组,一个组可以有很多人属于它。

,这是一种保留计数我想,一个人保留了其中的NSArray保留其保持的NSArray它保留回人集团。

但是我觉得我需要每个人都知道它是属于每组知道的人属于它哪个组。

我该如何解决这个问题?

我认为它NSArray不会保留它的所有成员,将打破周期,但显然NSArray必须保留them.So请提供一些建议。

回答

0

一般来说,您需要一个弱引用系统来实现这一点。您可以使用非保留的CFArray,但绕过保留/释放系统是危险的。这是NSMutableArray上的一个快速和肮脏的类别,以满足这个需求。

@implementation NSMutableArray (WeakReferences) 
    + (id)mutableArrayUsingWeakReferences { 
    return [self mutableArrayUsingWeakReferencesWithCapacity:0]; 
    } 

    + (id)mutableArrayUsingWeakReferencesWithCapacity:(NSUInteger)capacity { 
    CFArrayCallBacks callbacks = {0, NULL, NULL, CFCopyDescription, CFEqual}; 
    // We create a weak reference array 
    return (id)(CFArrayCreateMutable(0, capacity, &callbacks)); 
    } 
@end 

对于您的具体情况,我会退后一步,看看是否没有更好的方法来构建您的类来完全规避此问题。

0

看来读书,你需要坚持跨应用程序启动这个数据的问题后(​​我可能是完全错误的)。如果这是真的,你应该看看CoreData &为Person &组创建数据库实体。在这种情况下,CoreData将管理所有引用&,您可以使用类似于SQL的查询来获取“人员组中的人员”&“人员组”。

如果这不是真的,在我脑海中一个简单的解决方案是将间接引用,而不是直接引用。例如,每个人或组都应该有一个ID(可以说这是一个NSString)。然后,每个Person类将存储NSString s(与其所属的组对应的组ID)&每个Group类将存储NSString s(与其成员相对应的人员ID)的数组。有了这个,你将需要维护一个存储像&这样的对的地图/字典结构来查找这个结构中的ID。

HTH,

阿克沙伊