1

在以下课程中:

MGTile菜单

各种 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";

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

4

1 回答 1

0

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

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

NSString*告诉编译器将指针指向的内存作为NSString对象。照常。只是它在其他地方声明,并且大多数可能在其他地方正确初始化。您有责任确保它确实是NSString框架/库的文档应该告诉您的对象。

于 2013-04-18T14:19:43.847 回答