繁体   English   中英

c目标c中的全局变量

[英]c global variables in objective c

我想对全局的自己做一些命令。

  1. 如果我写我的.m文件

     int ran //is it global? every class can see it ? @implementation @end 
  2. 如果我在我的.h文件中写这个:

     int ran //is it global to any other class that include this .h ? @interface { } 
  3. 如果我在我的.h文件中写这个:

     extern int ran //is it global to any other class that include this .h ? @interface { } 
  4. 如果我在我的.h文件中写这个:

     @interface { int ran //can every other class that include it can see it ? } 

    AND有关@interface ,每一件事情,在界面上,只有这门课吗? @interface中的*NSString怎么样? 它只属于那个班级吗? 包括这个.h可以用它吗? 还是我必须让那个班级的对象看到它?

放置基元的全局变量的最佳方法是什么,只有我的类才会看到它并且可以使用它?

在任何类别声明或实施之外,

int ran;

定义名为ran of int的变量,无论该行是否在.h.c.m文件中。 通常将它放在.h是一个错误,因为如果多个文件包含此.h ,则变量定义两次或更多次。

extern int ran;

指定名为ran of int的变量已在别处定义,并且链接器应该能够找到它。

通常,在C中(因此在Objective-C中)声明全局变量的一般结构是:

globals.h:

extern int ran;

global.c:

int ran;

myWonderfulApp.m:

#import "globals.h"
...
ran = 42;

如果需要从.m外部看不到的全局变量,请使用:

static int ran;

如果你提供getter和setter,你仍然可以从外面使用它,但是如果你声明extern int ran; 你需要它的地方。

  1. 如果你写(在任何编译单元== .m文件中)

     int ran; 

    很好, 定义一个全局变量,初始化为零,链接器可见符号。

  2. 如果您在头文件中写入

     int ran; 

    这是个坏主意,因为包含标头的每个实现文件(.m)都会定义它自己的全局变量实例。 链接器混乱会出现。

  3. 如果您在头文件中写入

     extern int ran; 

    好的, 宣布一个全局变量。 必须在一个实现文件(.m)中定义。

  4. 如果您在头文件中写入

     @interface Foo : NSObject { int ran; } 

    那也没关系。 它声明了一个带有实例变量ran的Objective-C类。 将为Foo每个实例创建并属于实例变量。 实例变量是@protected(默认情况下),因此可以直接从任何派生类访问。 不过,这将是糟糕的设计。

    现在你不会在类的@interface中声明实例变量,而是在@implementation或只是@synthesize它们。

如果需要私有全局变量,请使用以下命令在实现文件中定义:

static int ran;

案例1,2,3是全球性的,4则不是

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM