objective-c - 某种外部变量与静态变量之间的区别

标签 objective-c variables static constants extern

某种外部变量和静态变量有什么区别?

//ClassA.m
NSString *var1;
static NSString *var2;

@implementation ClassA

...

最佳答案

外部
一个 extern常量/变量是一个可以跨多个目标文件访问(或引用)的定义。它是一个全局的、导出的 C 符号。如果您想从多个翻译单元(或编译文件)访问常量/全局变量,或者如果您想在多个二进制文件中使用它(例如,您想从您的应用程序中使用它,并且定义在动态库中,请使用此选项) )。您通常会在标题中声明它以供其他人使用。
静止的static为每个翻译发出一个副本。每个编译的文件也看到(例如是#include d)静态将发出该静态的副本。你应该避免这种情况。这将导致执行非常困惑的臃肿二进制文件。如果该值是文件的本地值,并且应该是该文件的私有(private)值,则您应该支持静态值。
由于这些原因,您应该支持 static在您的 .c、.m、.cpp 和 .mm 文件中,以及 extern在你的标题中。
最后,那个NSString指针应该是 const默认情况下:

// declaration - file.h
extern NSString * const var1;

// definition - file.m
NSString * const var1 = @"var1";
或者
static NSString * const var2 = @"var2";
如果您还想要更多,here's a related answer I wrote , 和 here's another .

关于objective-c - 某种外部变量与静态变量之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8829899/

相关文章:

java - 全局状态变量的静态与实例

c++ - 什么时候在 C++ 中使用静态(在未命名的命名空间上)是合适的?

objective-c - 如何根据动态需求动态/无限地创建 UIImageViews?

ios - UIImageView.transform 上的 KVO 不稳定

ios - NSAutoLayoutConstraints 崩溃的应用程序

bash - bash中字符串的长度

node.js - 将分配函数作为属性添加到 NodeJs 中的对象

java - 将构造函数参数传递给静态 block

objective-c - 将委托(delegate)方法放入一个类别中

c++ - 如何通过c++_中不同目录中的文件使用变量