如何存储在所有 ViewController 中更改的变量
How to Store Variable that is Changed In all ViewControllers
我想尝试制作一个可以在所有视图控制器中更改和访问的变量。我应该怎么做呢?我正在考虑使用静态变量,或者在其中一个视图控制器中创建一个全局变量并将其传递,但我不确定这是否是好的做法还是处理器密集型。
有很多方法可以做到这一点:
- 在
AppDelegate
中定义您的变量
- 使用
NSUserDefault
到 store/retrieve 你的变量
- 使用单例class
- 使用静态变量
当然,最简单的方法是在全局 .h
文件中将其定义为静态变量。
全局变量不是线程安全的。因此,最佳做法是尽可能避免使用它们。
您不需要全局变量来在视图控制器之间共享状态,以这种方式隐藏依赖关系实际上是非常糟糕的做法。
通过依赖注入使其显式化,并在导航时将此对象从一个 VC 传递到下一个。
SecondViewController *viewController = [[SecondViewController alloc] init];
viewController.user = self.user; // Pass the user along...
[self presentViewController:viewController animated:YES completion:nil];
你可以用 segues 做类似的事情,在 prepareForSegue
方法中传递你的对象。
我想尝试制作一个可以在所有视图控制器中更改和访问的变量。我应该怎么做呢?我正在考虑使用静态变量,或者在其中一个视图控制器中创建一个全局变量并将其传递,但我不确定这是否是好的做法还是处理器密集型。
有很多方法可以做到这一点:
- 在
AppDelegate
中定义您的变量
- 使用
NSUserDefault
到 store/retrieve 你的变量 - 使用单例class
- 使用静态变量
当然,最简单的方法是在全局 .h
文件中将其定义为静态变量。
全局变量不是线程安全的。因此,最佳做法是尽可能避免使用它们。
您不需要全局变量来在视图控制器之间共享状态,以这种方式隐藏依赖关系实际上是非常糟糕的做法。
通过依赖注入使其显式化,并在导航时将此对象从一个 VC 传递到下一个。
SecondViewController *viewController = [[SecondViewController alloc] init];
viewController.user = self.user; // Pass the user along...
[self presentViewController:viewController animated:YES completion:nil];
你可以用 segues 做类似的事情,在 prepareForSegue
方法中传递你的对象。