全局变量问题

时间:2010-04-29 12:34:54

标签: iphone objective-c

我是iphone中的新手。我使用一个标志变量来播放avAudio播放器中的歌曲。所有歌曲都正常地用旗帜变换。我们在标签栏中有两个标签,我希望如果有任何歌曲在其他标签歌曲信息播放如果我们使用那个标志变量,那么我将歌曲信息与歌曲同步。但是我无法访问歌曲信息标签上的标志值。我在歌曲信息文件中导入全局文件。

请帮助我定义一个var i可以在所有项目中访问的全局整数。

2 个答案:

答案 0 :(得分:3)

全球变数是邪恶的。随着应用程序的复杂性增加,它们将导致几乎无法追踪的问题。

有几种方法可以解决这个问题。

  1. 在您的app委托中创建BOOl属性,并通过引用app delegate引用该属性。这是实现此类功能的最常用方法。
  2. 创建自定义单例对象以保存变量。通过调用单例访问变量。您通常只将此一个用于大型复杂数据。
  3. 通过调用+[NSUserDefaults standardUserDefaults]
  4. 将值保存在用户默认值中

    在你的情况下,我认为(3)是最好的,因为你真的试图保存应用程序状态而不是用户数据。应用程序状态信息属于用户默认值。当您想要将应用程序重新启动回其先前状态时,这尤其方便。打开上次退出时打开的视图和数据。

答案 1 :(得分:2)

将变量放在应用程序委托.m文件中。将其声明为

extern MyType* MyVar = MyVal;

然后在你的app委托.h文件

extern MyType* MyVar = MyVal;

然后将.h文件包含在您需要变量的任何位置。

您还可以使用单独的文件将全局变量放入。

您也可以将extern放在* _prefix.h文件中 - 尽管我个人不喜欢这样做。