[英]c global variables in objective c
我想对全局的自己做一些命令。
如果我写我的.m文件
int ran //is it global? every class can see it ? @implementation @end
如果我在我的.h文件中写这个:
int ran //is it global to any other class that include this .h ? @interface { }
如果我在我的.h文件中写这个:
extern int ran //is it global to any other class that include this .h ? @interface { }
如果我在我的.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;
你需要它的地方。
如果你写(在任何编译单元== .m文件中)
int ran;
很好, 定义一个全局变量,初始化为零,链接器可见符号。
如果您在头文件中写入
int ran;
这是个坏主意,因为包含标头的每个实现文件(.m)都会定义它自己的全局变量实例。 链接器混乱会出现。
如果您在头文件中写入
extern int ran;
好的, 宣布一个全局变量。 必须在一个实现文件(.m)中定义。
如果您在头文件中写入
@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.