给定两个UIViewControllers A和B。A位于UINavigationController的顶部。 B具有init函数initWithArray。创建了B,并将其放入A中的initWithArray。然后将B推入NavigationController中,使其位于A的顶部。
在A中,这是传入的数组
NSArray *arrayInA; //(assuming all init and everything was done)
制作B
B *b = [[B alloc]initWithArray: arrayInA];
[self.navigationController pushViewController: B animation: YES];
在B中,initWithArray是这样的
if (self){
arrayInB = arrayFromA;
}
arrayInB只是B中的 private property
NSArray *arrayInB;
问题是,其中哪些是不同的对象? arrayInA / arrayFromA / arrayInB
编辑:我正在使用ARC。
最佳答案
在您的代码中,arrayInB指向与arrayFromA相同的内存地址,后者指向arrayInA。我建议更改您的代码,以便arrayInB保留对其接收的数组的引用。
if (self){
arrayInB = [arrayFromA retain];
}
要么
@property (nonatomic,retain) NSArray * arrayInB;
if (self){
self.arrayInB = arrayFromA;
}
如果您希望arrayInB是它自己的数组,该数组指向与arrayFromA相同的对象,那么您应该这样做。
if(self){
self.arrayInB = [NSArray arrayWithArray:arrayFromA];
}