我有这样的情况:
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/