我想对全局的自己做一些命令。
如果我写入我的.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可以用它吗?或者我是否必须让该类的对象才能看到它?
放置基元的全局变量的最佳方法是什么,只有我的类会看到它并且可以使用它?
答案 0 :(得分:1)
在任何课程声明或实施之外,
int ran;
定义了ran
类型的int
变量,无论该行是.h
,.c
还是.m
文件。通常将它放在.h
中会出错,因为如果多个文件包含此.h
,则变量将被定义两次或更多次。
extern int ran;
指定在其他地方定义了ran
类型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 :(得分:1)
如果你写(在任何编译单元== .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;
答案 2 :(得分:0)
案例1,2,3是全球性的,4不是