Iphone 如何制作全局数组?

Iphone 如何制作全局数组?,iphone,iphone-sdk-3.0,global-variables,nsmutablearray,Iphone,Iphone Sdk 3.0,Global Variables,Nsmutablearray,所以,我读了,这正是我想要的。然而。。。它不起作用。我想我不会使用singleton对象,而是在一个Global.h文件中创建数组,或者将其插入到_前缀文件中 但两次这样做都会出现错误: “static”之前应为说明符限定符列表 但它不起作用。所以我不知道如何让它工作,我可以删除extern,它可以工作,但我觉得我需要它使它成为一个常数 最终目标是让这个可变数组可以从我的项目中的任何对象或任何文件中访问。谢谢你的帮助 这是我的Globals.h文件的代码: #import <Foundat

所以,我读了,这正是我想要的。然而。。。它不起作用。我想我不会使用singleton对象,而是在一个Global.h文件中创建数组,或者将其插入到_前缀文件中

但两次这样做都会出现错误:

“static”之前应为说明符限定符列表

但它不起作用。所以我不知道如何让它工作,我可以删除extern,它可以工作,但我觉得我需要它使它成为一个常数

最终目标是让这个可变数组可以从我的项目中的任何对象或任何文件中访问。谢谢你的帮助

这是我的Globals.h文件的代码:

#import <Foundation/Foundation.h>

static extern NSMutableArray * myGlobalArray;
#导入
静态外部NSMutableArray*myGlobalArray;
我想我不需要实现文件中的任何内容。如果我把它放在前缀文件中,错误也是一样的

编辑

所以,我从Globals中删除了.m文件,我只在Globals.h中有关于的代码。假设我要继续这种使用全局变量的糟糕做法(我知道这很糟糕,我只是想测试一下),我现在有一个新的错误。它说:

“声明说明符中有多个存储类”

如果我删除“外部”它工作,如果我删除“静态”它工作,但两者都没有。。。现在怎么办

****双重编辑****


没错,所以我尝试将数组添加到UIApplication委托中,但我做得不对,因为它不起作用。有没有人能给我一些示例代码,告诉我在哪里放置和访问它?我不知道它应该放在实现中还是其他地方,一旦数组初始化,如何从其他文件访问它。。。我是要给数组设置一个新变量还是什么?

只是一个一般的编程建议——不要共享数组。你无法控制它,如果某件事在某个时间以你意想不到的方式改变了它,你几乎无法追踪它

相反,创建一个包含数组的对象,并使该对象成为单例对象(或者更好的是,为其创建一个工厂)

每当您想要修改数组时,都要调用对象上的方法来修改数组。如果您这样做,我敢打赌您会发现大量冗余代码,您可以将其分解到这个对象中(例如,搜索数组中的值——在对象中创建一个“search”方法,然后传入一个值)

这似乎是很多你不应该做的工作,但你会发现这是一项相当有趣的工作,而且你应该发现一旦你看到这个对象中有多少代码属于这个对象,你就必须做这件事……

使数组全局化的两种(主要)方法是分开的——要么你有一个带有方法的类

static NSMutableArray *foo;
+(NSMutableArray *)foo {
    return foo;
}
(在.m文件中)静态片段不在头文件中,或者

static extern NSMutableArray * myGlobalArray;
不使用单例包装器(我认为这样更好,因为它可以避免额外的不必要的代码)

不管怎样,这仍然是一种我会尽量避免的糟糕做法。

\import
#import <Foundation/Foundation.h>

static extern NSMutableArray * myGlobalArray;

@interface Globals : NSObject {
}


@end
静态外部NSMutableArray*myGlobalArray; @接口全局变量:NSObject{ } @结束
一般来说,“Globals.h”文件的存在意味着反模式正在工作

我甚至反对Bill K的建议,根本不使用单例模式


相反,在应用程序委托中创建数组,并将其传递给根视图控制器,然后沿着层次结构传递给需要访问它的组件。

只需将数组添加为应用程序委托的属性,然后像以下方式访问它:

[[UIApplication sharedApplication] myArray];

这就是我想要的:

谢谢你给我指明了正确的方向