如何使用 extern 关键字在 IOS 中定义全局变量?
How to use extern keyword to define global ivars in IOS?
如何使用 extern 关键字来定义全局变量,有人知道这个问题吗?在此先感谢。
评论更新:
好的,我从网上搜索到我应该在.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
?
我从我这边测试了它,我可以成功构建它,但我感到困惑,为什么要以这种方式声明全局变量。变量在任何代码块之外。
您需要在接口中将其外部化并在您的 testGlobal
class 的实现中声明:
//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];
}
如何使用 extern 关键字来定义全局变量,有人知道这个问题吗?在此先感谢。
评论更新:
好的,我从网上搜索到我应该在.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
?
我从我这边测试了它,我可以成功构建它,但我感到困惑,为什么要以这种方式声明全局变量。变量在任何代码块之外。
您需要在接口中将其外部化并在您的 testGlobal
class 的实现中声明:
//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];
}