在目标c中声明一个全局变量的问题

时间:2009-02-27 04:11:25

标签: objective-c

我有一个类的全局变量 classA.h

const NSString *global;

classA.m

global=[array objectAtIndex:0];//a array store sort of string

在另一个类中我想调用这个全局变量

classB.m

import "class.h"

NSLog(@"%@",global);

但它不起作用,我知道当我将一个值直接分配给我的全局变量而不是另一个变量时它会起作用但是有人可以告诉我如何从数组中实现它吗?

2 个答案:

答案 0 :(得分:3)

在标题中,使用:

extern const NSString *global;

并在实施中(.m):

const NSString *global;

“extern”引用告诉所有包含该变量的文件,但它在其他地方声明。最后,在您的实现文件中,您将实际声明。

答案 1 :(得分:1)

你不能那样做。

const NSString *global;
NSString const *global;

都指向一个常量NSString对象的指针(可以更改)。在Objective-C中,常量对象毫无意义。编译器无法强制实施对象的常量。它无法知道方法是否改变了对象的内部状态。此外,库中的所有类总是将指向非常量对象的指针作为其方法的参数,因此使用任何const对象指针都会引发很多警告。

另一方面,有对象的常量指针,声明如下:

NSString * const global;

这意味着指针指向常规NSString对象,但它的值无法更改。这意味着您还必须初始化指针的值(以后不能更改)。这用于定义常量。但这仅适用于NSStrings和字符串文字。对于所有其他类,无法指定初始化所需的编译时常量对象。在这种情况下,它是一个真正的常量 - 字符串文字根据定义是不可变的。

但在你的情况下,你可以取消const。您想稍后更改指针,使其不能是NSString * const。如果你坚持全球化,你只需要定期NSString *。另一方面 - 全局变量是邪恶的。你应该改变你的设计,所以你不需要它。