Qui*_*lor 58
你会发现它extern在Cocoa框架中被广泛使用,并且很难找到一个令人信服的论据,即他们的OO被"宠坏了".相反,Cocoa是封装良好的,只能通过extern暴露它必须的东西.全局定义的常量当然是最常见的用法,但不一定是唯一有效的用法.
IMO,使用extern不一定"破坏"面向对象.即使在OO中,也经常使用可从任何地方访问的变量.在Objective-C中,使用extern是缺少"类变量"(如staticJava中声明的那些变量)的最常用的解决方法.它允许您扩展可以在其声明的编译单元之外引用符号的范围,主要是承诺它将由某人在某处定义.
您也可以结合extern使用__attribute__((visibility("hidden"))),以创建一个可以在其编译单元外部使用的符号,但没有以外的联动单位,可以这么说.我已经将它用于自定义库和框架代码,以正确封装更高级别的内部细节.
Tho*_*ing 16
externObjective-C中的关键字有一些用例.
Aaron Hillegass建议创建全局通知名称extern.例如:
extern NSString* const XYYourNotification;
Run Code Online (Sandbox Code Playgroud)
然后NSString*,您可以在实现中定义实际值
不使用时出现问题的另一个示例extern:
假设您在头文件中有一个全局变量:
NSString *globalVar = @"Wonderful";
Run Code Online (Sandbox Code Playgroud)
您可以通过导入该头文件在 3 个地方使用它。您的代码无法编译,链接器抱怨您的代码中定义了 3 个重复的符号。要解决它,您有两种方法:
使用static,在这种情况下,导入该标头的每个文件都将定义其单独的引用(并且更改一个字符串不会影响其他文件中导入的其他字符串):
static NSString *globalVar = @"Wonderful";
Run Code Online (Sandbox Code Playgroud)
用extern在.h文件和.m文件定义它。这样只会定义一个引用,并且每个文件都将使用相同的引用(更改会反映在所有文件中):
extern NSString *globalVar; // in .h
NSString *globalVar = @"Wonderful"; // in .m
Run Code Online (Sandbox Code Playgroud)
选择最适合的方法。
| 归档时间: |
|
| 查看次数: |
43184 次 |
| 最近记录: |