如何使用extern关键字在IOS中定义全局ivars?

时间:2015-08-29 14:31:19

标签: ios objective-c global

如何使用extern关键字定义全局ivars,是否有人知道这个问题?提前感谢。

评论更新:

好的,我从互联网上搜索我应该在.h文件中声明变量,如下图所示,

int name;
@interface testGlobal : NSObject
@end

当我想在一个.m文件中使用它时,我应该写如下,

extern int name;
@implementation ViewController

当我在实现文件中使用它时,我收到以下错误

duplicate symbol _name in:
/Users/jay_Gao/Library/Developer/Xcode/DerivedData/Audition-bahpwhcmpnzxppajcliyuhtuaywz/Build/Intermediates/Audition.build/Debug-iphonesimulator/Audition.build/Objects-normal/x86_64/Test.o
/Users/jay_Gao/Library/Developer/Xcode/DerivedData/Audition-bahpwhcmpnzxppajcliyuhtuaywz/Build/Intermediates/Audition.build/Debug-iphonesimulator/Audition.build/Objects-normal/x86_64/testGlobal.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)'
, 你能解释一下吗? - 我通过删除成功构建    #import "testGlobal.h" 来自test.m.但是,如果我想在其他文件中导入该文件testGlobal.h,我不能这样做吗?我应该只在AppDelegate.h中声明全局变量吗?由于在其他文件中将导入AppDelegate.h

我从我这边测试它并且我可以成功地构建它,但我感到困惑的是为什么要以这种方式声明全局变量。变量在任何代码块之外。

1 个答案:

答案 0 :(得分:0)

您需要在界面中对其进行外设并在testGlobal类的实现中声明:

//Global.h
extern int xyz;

@interface Global : NSObject
@end

//Global.m
#import "Global.h"

int xyz = 123;
@implementation Global
@end

//ViewController.m
#import "ViewController.h"
#import "Global.h"

@implementation ViewController

- (void)viewDidLoad {
    NSLog(@"%d", xyz);
    [super viewDidLoad];
}