在以下课程中:
各种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";
为什么这不是必要的,这里发生了什么?
答案 0 :(得分:0)
这意味着实际变量在程序的其他部分中定义。可能在某些框架或库中。您甚至不必拥有相关的来源。
extern
关键字告诉链接器在符号表中查找名为MGTileMenuWillDisplayNotification
的符号。 (我认为这将是一个静态变量,但不确定它是否会成为别的东西。)
NSString*
告诉编译器将指针指向的内存作为NSString
对象。照常。只是它被宣布在其他地方并且大多数probalby在其他地方正确初始化。确保它确实是框架/库的文档应该告诉您的NSString
对象在您的职责范围内。