我正在使用全局变量从一个视图控制器访问值到另一个,我面临的问题是在 viewdidload 下调用全局变量它将返回 null,但是如果我在 (ibaction) 下使用全局变量,它可以正常工作。
问问题
356 次
1 回答
1
问题很可能与评估顺序有关:有问题的变量在 时尚未初始化viewDidLoad:
,但在执行操作时,初始化已完成。
您可以尝试通过从稍后发生的另一个回调访问您的全局来调整时间viewDidLoad:
,但为了完全避免这个问题,您可以使用全局单例而不是全局变量。创建一个单独的类,在其中保留全局状态,在需要使用它的地方包含其标题,并调用其类方法来访问全局变量,如下所示:
标题:
@interface Globals
+(MyGlobal*)global;
@end
执行:
@implementation Globals
+(MyGlobal*)global {
static MyGlobal* _global;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_global = [[MyGlobal alloc] init];
});
return _global;
}
@end
用法:
MyGlobal *g = [Globals global];
于 2012-08-07T13:14:35.377 回答