如何制作全局数组?

时间:2010-03-19 23:42:05

标签: iphone iphone-sdk-3.0 global-variables nsmutablearray

所以,我读了this post,这正是我所寻找的。但是......它不起作用。我想我不打算使用单例对象,而是将数组放在Global.h文件中,或者将其插入到_Prefix文件中。

我这两次都这样做,我得到错误:

'static'之前的预期说明符限定符列表

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

最终目标是可以从项目中的任何对象或任何文件访问此Mutable数组。帮助将不胜感激!

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

#import <Foundation/Foundation.h>

static extern NSMutableArray * myGlobalArray;

我认为我在实现文件中不需要任何内容​​。如果我把它放在前缀文件中,则错误是相同的。

修改

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

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

如果我删除“extern”它可以工作,如果我删除“静态”它可以工作,但两者都不...现在是什么?

**** Double Edit ****

Aright,所以我尝试将数组添加到我的UIApplication Delegate中,但我做错了因为它不起作用。有人可以给我一些示例代码,在哪里放置访问权限吗?我不知道它是应该在实现中还是在其他地方,并且一旦数组被初始化,如何从其他文件访问它...我是否为数组设置了一个新变量,还是什么?

6 个答案:

答案 0 :(得分:3)

只是一般编程建议 - 不要共享数组。你无法控制它,几乎不可能追踪到某些东西是否会以一种你不期望的方式改变它。

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

每当您想要修改数组时,请调用对象上的方法来执行此操作。如果你这样做,我打赌你会发现很多冗余代码可以考虑到这个对象(例如,在数组中搜索一个值 - 在对象中创建一个“搜索”方法,然后传入一个值)。

看起来你可能不需要做很多工作,但是你会发现这是相当有趣的工作,你应该发现一旦你看到这个对象有多少代码就必须这样做...

答案 1 :(得分:3)

只需将数组添加为应用程序委托的属性,并将其访问为:

[[UIApplication sharedApplication] myArray];

答案 2 :(得分:2)

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

static NSMutableArray *foo;
+(NSMutableArray *)foo {
    return foo;
}

(在.m文件中)静态文件NOT不在头文件中,或只是

static extern NSMutableArray * myGlobalArray;

没有单例包装器(我认为它更好,因为它可以避免你有一些额外的不必要的代码)

无论哪种方式,我都会尽量避免这种做法。

答案 3 :(得分:1)

一般来说,“Globals.h”文件的存在是一种难闻的气味,因为有反模式在起作用。

我甚至会建议反对比尔K的建议,而不是使用单身人士模式。

相反,在app delegate中创建数组,并将其传递给根视图控制器,并沿层次结构传递给需要访问它的组件。

答案 4 :(得分:1)

这就是我想要的:

http://derekneely.com/tag/app-delegate/

感谢您指点我正确的方向!

答案 5 :(得分:0)

#import <Foundation/Foundation.h>

static extern NSMutableArray * myGlobalArray;

@interface Globals : NSObject {
}


@end