给定两个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];
}

10-04 18:46