2

我正在使用全局变量从一个视图控制器访问值到另一个,我面临的问题是在 viewdidload 下调用全局变量它将返回 null,但是如果我在 (ibaction) 下使用全局变量,它可以正常工作。

4

1 回答 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 回答