我已经宣布了一个全局变量,如下面的
extern NSString *name;
@interface viewcontrollerOne{}
在实现文件中我正在某种方法中访问该全局变量,如
-(void)someMethod
{
name = @"hello";
}
但是这会给链接器错误。
“name”,引自: - viewcontrollerOne.o中的[viewcontrollerOne someMethod] ld:找不到架构i386的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
答案 0 :(得分:2)
以下只是一个声明:
extern NSString * const name; // << side note: this should typically be const
它声明NSString*
的符号名为name
。它不会创建存储空间。
为此,您需要提供name
的定义。为此,请将以下添加到.m 文件中:
NSString * const name = @"hello";
如果你想在实例方法中设置它,如你的例子中所示,那么你可以声明它:
MONFile.h
extern NSString * name;
定义它:
MONFile.m
NSString * name = 0;
然后您可以在实例方法中编写name = @"hello";
。
答案 1 :(得分:0)
extern通常用于创建联系人。如果要创建全局变量字符串,可以按以下方式执行:
·H
+ (void)setName:(NSString*)name_in;
+ (NSString*)name;
的.m
NSString* gName;
@implementation ...
+ (void)setName:(NSString*)name_in{
gName = name_in;
}
+ (NSString*)name{
return gName;
}