未初始化的extern NSString用法

时间:2013-04-18 14:02:24

标签: objective-c c nsstring extern

在以下课程中:

MGTileMenu

各种extern NSString以下列方式定义,用作通知:

·H

extern NSString *MGTileMenuWillDisplayNotification; // menu will be shown

的.m

NSString *MGTileMenuWillDisplayNotification;

使用方法如下:

[[NSNotificationCenter defaultCenter] postNotificationName:MGTileMenuWillDisplayNotification 
                                                    object:self 
                                                  userInfo:nil];

我的问题是:extern NSString MGTileMenuWillDisplayNotification永远不会被初始化为任何值 - 但此代码有效。我原本期望.m文件中的实现是:

NSString *MGTileMenuWillDisplayNotification = @"MGTileMenuWillDisplayNotification";

为什么这不是必要的,这里发生了什么?

1 个答案:

答案 0 :(得分:0)

这意味着实际变量在程序的其他部分中定义。可能在某些框架或库中。您甚至不必拥有相关的来源。

extern关键字告诉链接器在符号表中查找名为MGTileMenuWillDisplayNotification的符号。 (我认为这将是一个静态变量,但不确定它是否会成为别的东西。)

NSString*告诉编译器将指针指向的内存作为NSString对象。照常。只是它被宣布在其他地方并且大多数probalby在其他地方正确初始化。确保它确实是框架/库的文档应该告诉您的NSString对象在您的职责范围内。