Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何存储在所有ViewController中更改的变量_Objective C_Variables_Uiviewcontroller_Static_Global Variables - Fatal编程技术网

Objective c 如何存储在所有ViewController中更改的变量

Objective c 如何存储在所有ViewController中更改的变量,objective-c,variables,uiviewcontroller,static,global-variables,Objective C,Variables,Uiviewcontroller,Static,Global Variables,我想尝试创建一个可以在所有视图控制器中更改和访问的变量。我该怎么做呢?我在考虑使用静态变量,或者在其中一个视图控制器中创建一个全局变量并传递它,但我不确定这是一种好的做法还是处理器密集型的做法。有很多方法可以做到这一点: 在AppDelegate 使用NSUserDefault存储/检索变量 使用单例类 使用静态变量 当然,最简单的方法是将其定义为全局.h文件中的静态变量 全局变量不是线程安全的。因此,最好的做法是尽量避免使用它们。视图控制器之间不需要全局变量来共享状态,而以这种方式隐藏依赖关系

我想尝试创建一个可以在所有视图控制器中更改和访问的变量。我该怎么做呢?我在考虑使用静态变量,或者在其中一个视图控制器中创建一个全局变量并传递它,但我不确定这是一种好的做法还是处理器密集型的做法。

有很多方法可以做到这一点:

  • AppDelegate
  • 使用
    NSUserDefault
    存储/检索变量
  • 使用单例类
  • 使用静态变量
  • 当然,最简单的方法是将其定义为全局
    .h
    文件中的静态变量


    全局变量不是线程安全的。因此,最好的做法是尽量避免使用它们。

    视图控制器之间不需要全局变量来共享状态,而以这种方式隐藏依赖关系实际上是非常糟糕的做法

    通过依赖项注入使其显式化,并在导航时将此对象从一个VC传递到下一个VC

    SecondViewController *viewController = [[SecondViewController alloc] init];
    viewController.user = self.user; // Pass the user along...
    [self presentViewController:viewController animated:YES completion:nil];
    

    您可以对segues执行类似的操作,在
    prepareForSegue
    方法中传递对象。

    因此,如果我有一个NSMutableArray,我应该将其传递给ViewController。我不建议传递原始的可变数组,而是创建一个对象来封装数组和任何相关状态。