有很多像我一样的人正在使用这样的网站(以及其他网站)来教他们自己的iOS和Xcode。那里有很多信息,介于我和我买的书之间,我学到了很多东西,差不多完成了我的第一个应用程序。我需要访问四个NSMutableArrays来将信息从一个UIViewController传递到另一个UIViewController以显示在UITableView中。
问题是关于单身人士(以及appDelegate中的全局变量)的信息是多变的,并且对于一个吵闹的程序员而言是混乱的。在哪里可以找到有关这两种在应用程序内和UIView控制器之间共享信息的方式的清晰,准确和完整的信息?
感谢。
答案 0 :(得分:2)
(首先,我觉得有必要指出,这不是你应该用来在多个视图控制器中提供数据的方式。)
Objective-C中没有全局变量。至少不是'app-wide'。您可以通过以下方式声明“文件范围”变量:
static NSArray *_array;
但您只能在同一个文件中访问它。要使其在其他类中可访问,您必须创建类方法来执行此操作(至少据我所知):
+ (NSArray *)array
{
return array;
}
+ (void)setArray:(NSArray *)array
{
_array = array;
}
(当然你还需要在头文件中声明类方法。
单例模式可以像这样实现:
@interface SomeClass : NSObject
@property(nonatomic,retain)NSArray *array;
+(SomeClass*)sharedInstance;
@end
@implementation SomeClass
static SomeClass *instance =nil;
+(SomeClass *)sharedInstance
{
@synchronized(self)
{
if(instance == nil)
{
instance= [[SomeClass alloc] init];
}
}
return instance;
}
然后您可以通过调用:
来访问该数组[[SomeClass] sharedInstance].array
答案 1 :(得分:0)
你可以使用静态(如在另一个答案中)或“单身”声明,它将完成这项工作。这不是真正的单身人士,但它是这样的:
AppDelegate* app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
NSArray* arr1 = app.arr1;
if(!arr1) {
// .. init the arr1 here
NSArray* tmp = ...
app.arr1 = tmp;
}
当然最好在AppDelegate本身中覆盖setArr1
方法,但这取决于它。