【问题标题】:How to make a Global Array?如何制作一个全局数组?
【发布时间】:2010-03-19 23:42:05
【问题描述】:

所以,我阅读了this post,这几乎正是我所寻找的。然而……它不起作用。我想我不会使用单例对象,而是在 Global.h 文件中创建数组,或者将其插入到 _Prefix 文件中。

虽然我两次都这样做,但我得到了错误:

“静态”之前的预期说明符限定符列表

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

最终目标是让我的项目中的任何对象或任何文件都可以访问这个可变数组。帮助将不胜感激!

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

#import <Foundation/Foundation.h>

static extern NSMutableArray * myGlobalArray;

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

编辑

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

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

如果我删除“extern”它可以工作,如果我删除“static”它可以工作,但是两者都没有......现在怎么办?

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

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

【问题讨论】:

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


    【解决方案1】:

    只是一般的编程建议——不要共享数组。您无法控制它,并且几乎无法追踪是否有某件事以您未预料到的方式一次改变它。

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

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

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

    【讨论】:

      【解决方案2】:

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

      [[UIApplication sharedApplication] myArray];
      

      【讨论】:

        【解决方案3】:

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

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

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

        static extern NSMutableArray * myGlobalArray;
        

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

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

        【讨论】:

          【解决方案4】:

          通常,“Globals.h”文件的存在是一种不好的气味,表明存在反模式。

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

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

          【讨论】:

            【解决方案5】:

            这就是我要找的东西:

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

            感谢您为我指明了正确的方向!

            【讨论】:

              【解决方案6】:
              #import <Foundation/Foundation.h>
              
              static extern NSMutableArray * myGlobalArray;
              
              @interface Globals : NSObject {
              }
              
              
              @end
              

              【讨论】:

                猜你喜欢
                • 2021-04-22
                • 2019-09-11
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-10-04
                • 2014-03-20
                • 2017-09-19
                • 1970-01-01
                相关资源
                最近更新 更多