我有这样的情况:

NSMutableArray * A = [[NSMutableArray alloc]initwithObjects:@"one",nil];
NSMutableArray * B = [[NSMutableArray alloc]initwithObjects:@"two",nil];

[A addObject:B];
[B addObject:A];

现在这是一个保留周期,我该如何打破这个保留周期? (使用弱引用)....在上面的示例中。
谢谢

最佳答案

我首先会问为什么需要这样做的原因-但是如果您确定这是最好的数据体系结构,我会使用NSValue。要将对对象的引用(不保留对象)存储在Foundation集合类中,可以使用+[NSValue valueWithNonretainedObject:]:

NSMutableArray *a = [[NSMutableArray alloc] initwithObjects:@"one", nil];
NSMutableArray *b = [[NSMutableArray alloc] initwithObjects:@"two", nil];

[a addObject:b];
[b addObject:[NSValue valueWithNonretainedObject:a]];

然后,要稍后从NSValue实例获取对象,您可以执行以下操作:
NSMutableArray *c = (NSMutableArray *) [[b objectAtIndex:index] nonretainedObjectValue];

附录

我已将答案从使用+[NSValue valueWithPointer:]更改为+[NSValue valueWithNonretainedObject:],因为在ARC下,编译器会提示(由于从对象类型转换为const void *)。尽管功能上相同,但类型转换和方法名称更有意义(并且编译器实际上将使您无需借助黑客手段即可进行编译)。

关于iphone - 如何在Objective-C中创建弱引用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3618479/

10-10 19:22