2012-02-09 131 views
0

我想对自己做一些关于全局变量的命令。c目标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时,我可以使用它吗?或者是否必须让该类的对象才能看到它?

什么是最好的方式来放置一个原语的全局变量,只有我的班级会看到它,并可以使用它?

回答

1
  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; 
+0

谢谢大家。换句话说,如果我需要一个全局性的外部类,我会做“外部”,如果我需要一个变量是全球内部类只有我做“静态”诠释?因为人们警告我静静的开始 – Curnelious 2012-02-09 14:18:08

1

任何类声明或实现之外,

int ran; 

定义了一个名为intran变量,不管该行是否在.h.c.m文件。通常这是一个错误,将它放在.h中,因为如果多个文件包含此.h,则该变量会被定义两次或更多次。

extern int ran; 

指定一个名为int类型的ran变量已在别处定义和链接器应该能找到它。

通常,(在Objective-C,从而在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;在你需要它。

0

情况下,1,2,3是全球性的,4是不是