我正在研究的iPhone应用程序正在定期终止......我感觉这是因为我在多个视图控制器中访问共享的NSArray。所以...
在几个ViewControllers中传递NSArray / NSMutableArray的最佳方法是什么...所有这些都可以修改和/或将其设置为nil或其他什么?
由于
答案 0 :(得分:3)
一般来说,有两种方法。
在第一种方法中,当您实例化下一个视图控制器时,可以将数组属性设置为从当前(即将成为上一个或父级)视图控制器“继承”:
MyNextViewController *_myNextViewController = [[MyNextViewController alloc] initWithNibName:@"MyNextViewController" bundle:nil];
_myNextViewController.myViewControllerArray = self.myViewControllerArray;
...
在第二种方法中,您可以在应用程序委托中创建myAppDelegateArray
属性,在应用程序初始化时实例化数组(或在其他地方按需实例化)。
然后,您可以从任何类(包括视图控制器)调用此属性的getter。
例如,在MyNextViewController
的实例中,您可能有一个名为myViewControllerArray
的属性,您可以按如下方式设置:
self.myViewControllerArray = [UIAppDelegate myAppDelegateArray];
您可以在应用程序常量文件的某处添加#define
语句,例如:
#define UIAppDelegate ((MyAppDelegate *)[UIApplication sharedApplication].delegate)
如果您愿意,可以使用完整的[UIApplication sharedApplication].delegate
来电。
作为一种通用方法,人们似乎更喜欢应用委托代理方法,因为它分散了对所需属性的访问权限。
使用此方法,如果重新排列视图控制器或将新视图控制器插入VC层次结构,则无需调试从父视图控制器继承的子视图控制器属性,因为始终可以从应用程序委托中获取引用
答案 1 :(得分:0)
你可能没有保留它,它会被取消分配,你试图再次访问它。尝试发送[myArray retain]你正在使用它(在每个控制器中),以及[myArray release]完成后