1

我已经声明了一个如下所示的全局变量

extern NSString *name;
@interface viewcontrollerOne{}

在实现文件中,我正在以某种方法访问该全局变量,例如

-(void)someMethod
{
name = @"hello";
}

但这会导致链接器错误。

“名称”,引用自:viewcontrollerOne.o ld 中的 -[viewcontrollerOne someMethod]:未找到架构 i386 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

4

2 回答 2

2

以下仅为声明:

extern NSString * const name; // << side note: this should typically be const

它声明有一个NSString*named符号name。它不创建存储。

为此,您需要为name. 为此,请将以下内容添加到您的 .m文件中:

NSString * const name = @"hello";

如果您想在实例方法中设置它,如您的示例中所示,那么您可以声明它:

MONFile.h

extern NSString * name;

定义它:

MON文件.m

NSString * name = 0;

name = @"hello";然后你可以在你的实例方法中编写。

于 2012-11-20T07:33:14.557 回答
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;
}
于 2012-11-20T07:35:14.670 回答