Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.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
Ios 在目标c中动态更改全局变量_Ios_Objective C_Macros_C Preprocessor - Fatal编程技术网

Ios 在目标c中动态更改全局变量

Ios 在目标c中动态更改全局变量,ios,objective-c,macros,c-preprocessor,Ios,Objective C,Macros,C Preprocessor,如何设置可在所有类中访问的全局布尔变量?可以根据运行时条件更改其值 在AppDelegate.h中声明bool变量 @property(nonatomic, assign)BOOL *isBOOL; 然后在视图控制器实现文件中创建应用程序代理共享应用程序对象,并在viewdidload中将其指定为共享应用程序对象 @interface YourViewController () { AppDelegate *appdel; } - (void)viewDidLoad { appdel=

如何设置可在所有类中访问的全局布尔变量?可以根据运行时条件更改其值

在AppDelegate.h中声明bool变量

@property(nonatomic, assign)BOOL *isBOOL;
然后在视图控制器实现文件中创建应用程序代理共享应用程序对象,并在viewdidload中将其指定为共享应用程序对象

@interface YourViewController ()
{
   AppDelegate *appdel;
}
- (void)viewDidLoad {
 appdel=(AppDelegate *)[[UIApplication sharedApplication] delegate];
}
现在,您可以通过创建appdelegate共享应用程序对象来访问每个类中的isBOOL变量,还可以根据您的条件更改变量值

 appdel.isBOOL=YES/NO; 

在AppDelegate.h中声明bool变量

@property(nonatomic, assign)BOOL *isBOOL;
然后在视图控制器实现文件中创建应用程序代理共享应用程序对象,并在viewdidload中将其指定为共享应用程序对象

@interface YourViewController ()
{
   AppDelegate *appdel;
}
- (void)viewDidLoad {
 appdel=(AppDelegate *)[[UIApplication sharedApplication] delegate];
}
现在,您可以通过创建appdelegate共享应用程序对象来访问每个类中的isBOOL变量,还可以根据您的条件更改变量值

 appdel.isBOOL=YES/NO; 
虽然@MiteshDobareeya提出的单例方法的属性是一个有用的解决方案,解决了同样的问题,但它实际上不是一个全局变量

全局变量是每个人都可以访问的顶级变量:

Foo.h:

extern SomeType globalVariableName;
// For example:
extern NSString * globalString;
extern BOOL globalBool;


Foo.m

// This is at the top-level, outside any @implementation !
// You need this once in your app to actually define the
// variables values.
SomeType globalVariableName = initialValue;
NSString * globalString = @"Zoobar";
BOOL globalBool = YES;


SomeOther.m

#import "Foo.h"

- (void)foo {
    // You can access the variable in any Objective-C method
    // or even C function.
    if (globalBool) {
        [self doSomething];
    }
}
虽然@MiteshDobareeya提出的单例方法的属性是一个有用的解决方案,解决了同样的问题,但它实际上不是一个全局变量

全局变量是每个人都可以访问的顶级变量:

Foo.h:

extern SomeType globalVariableName;
// For example:
extern NSString * globalString;
extern BOOL globalBool;


Foo.m

// This is at the top-level, outside any @implementation !
// You need this once in your app to actually define the
// variables values.
SomeType globalVariableName = initialValue;
NSString * globalString = @"Zoobar";
BOOL globalBool = YES;


SomeOther.m

#import "Foo.h"

- (void)foo {
    // You can access the variable in any Objective-C method
    // or even C function.
    if (globalBool) {
        [self doSomething];
    }
}

我肯定不会选择任何建议的解决方案,这些解决方案基于纯ANSI-C解决方案,或者逻辑上不正确地建议使用app delegate作为全局模型,但我会在模型层上创建一个singleton类,它可以在运行时为您存储任何属性

即使这在技术上不是一个全局变量,但它在任何项目中都更有意义,而不是在某个不属于实际全局变量的随机类中应用纯全局变量


RuntimeEnvironment.h RuntimeEnvironment.m
在行动中: 设置变量:

[RuntimeEnvironment sharedEnvironment].switch = TRUE;
或读取其当前值:

BOOL _myGlobalSwitch = [RuntimeEnvironment sharedEnvironment].isSwitchOn;


随着项目的发展,此解决方案很容易维护或扩展(它会),而且您也在模型的某个位置对所有内容进行正确的封装。

我肯定不会选择任何建议的解决方案,它基于纯ANSI-C解决方案,或者逻辑上不正确地建议使用app delegate作为全局模型,但我会在模型层上创建一个singleton类,它可以在运行时为您存储任何属性

即使这在技术上不是一个全局变量,但它在任何项目中都更有意义,而不是在某个不属于实际全局变量的随机类中应用纯全局变量


RuntimeEnvironment.h RuntimeEnvironment.m
在行动中: 设置变量:

[RuntimeEnvironment sharedEnvironment].switch = TRUE;
或读取其当前值:

BOOL _myGlobalSwitch = [RuntimeEnvironment sharedEnvironment].isSwitchOn;



随着项目的发展,此解决方案很容易维护或扩展(它会),而且您也可以在模型的某个位置正确地对所有内容进行封装。

您遇到了相互冲突的需求。顾名思义,常量不能在运行时更改。您可能需要一个具有默认值的全局变量,尽管很难说您实际上想要实现什么。也许功能会更好。因此,请编辑您的问题并澄清您试图解决的问题(此值用于什么/您希望如何使用它)。请编辑您的问题并显示您已经拥有的内容,以使其更清楚。您有相互冲突的要求。顾名思义,常量不能在运行时更改。您可能需要一个具有默认值的全局变量,尽管很难说您实际上想要实现什么。也许功能会更好。因此,请编辑您的问题并澄清您试图解决的问题(此值用于什么/您希望如何使用它)。请编辑您的问题并显示您已经拥有的内容,以使其更清楚。不要到处创建实例变量,最好在
AppDelegate
类上创建一个单例getter,如下所示:
+(AppDelegate*)sharedapdelegate{return(AppDelegate*)[[UIApplication sharedApplication]delegate]}
然后您只需执行
[[AppDelegate sharedAppDelegate]isBOOL]
即可。AppDelegate仅用于与整个应用程序的运行相关的操作。不要用它来存放任何你想要的旧东西。除非这是关于整个应用程序的,否则请将其放入适当的文件中。我不会将应用程序委托用作全局模型–这根本不是应用程序委托的目的。您也可以在prefixheader文件中定义它。与其到处创建实例变量,最好在
AppDelegate
类上创建一个单例getter,如下所示:
+(AppDelegate*)sharedapdelegate{return(AppDelegate*)[[UIApplication sharedApplication]delegate]}
然后您只需执行
[[AppDelegate sharedAppDelegate]isBOOL]
即可。AppDelegate仅用于与整个应用程序的运行相关的操作。不要用它来存放任何你想要的旧东西。除非这是关于整个应用程序的,否则请将其放入适当的文件中。我不会将应用程序委托用作全局模型–这根本不是应用程序委托的目的。您也可以在prefixheader文件中定义它。此全局变量“globalBool”在整个应用程序中是否只有一个实例?如果我在一个类中编辑它,它也会反映在其他类中吗?你需要在每个文件中全局重构它。@Jeyanthu:是的,它只是整个应用程序中的一个实例。在一个地方操作它也会在任何其他地方“更新”,因为他们正在访问相同的东西。@holex:你说“你需要在eac中全局重构它”是什么意思