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

Objective c 在目标c中声明全局变量的问题,objective-c,Objective C,我在类的1中有一个全局变量,比如 A.h级 const NSString *global; A.m级 global=[array objectAtIndex:0];//a array store sort of string 在另一个类中,我想称这个全局变量 B.m级 import "class.h" NSLog(@"%@",global); 但它不起作用,我知道当我直接给全局变量赋值而不是从另一个变量赋值时,它会起作用,但有人能告诉我如何通过数组实现它吗?在标题中,使用: extern

我在类的1中有一个全局变量,比如 A.h级

const NSString *global;
A.m级

global=[array objectAtIndex:0];//a array store sort of string
在另一个类中,我想称这个全局变量

B.m级

import "class.h"

NSLog(@"%@",global);
但它不起作用,我知道当我直接给全局变量赋值而不是从另一个变量赋值时,它会起作用,但有人能告诉我如何通过数组实现它吗?

在标题中,使用:

extern const NSString *global;
在实现中(.m):

“extern”引用告诉所有包含该变量的文件,该变量存在,但在别处声明。最后,在实现文件中,您将实际声明放在标题中,使用:

extern const NSString *global;
在实现中(.m):


“extern”引用告诉所有包含该变量的文件,该变量存在,但在别处声明。最后,在您的实现文件中,您可以放入实际的声明。

您不能这样做

const NSString *global;
NSString const *global;
两者都表示指向常量
NSString
对象的指针(可以更改)。在Objective-C中,常量对象没有意义。编译器无法强制执行对象的常量。它无法知道方法是否改变了对象的内部状态。此外,库中的所有类总是将指向非常量对象的指针作为其方法的参数,因此使用任何常量对象指针都会导致大量警告

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

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


但在您的情况下,您可以取消
常量
。您希望稍后更改指针,使其不能是
NSString*const
。如果您坚持使用全局变量,您只需将其设置为常规的
NSString*
。另一方面,地球人是邪恶的。你应该改变你的设计,这样你就不需要它了。

你不能这样做

const NSString *global;
NSString const *global;
两者都表示指向常量
NSString
对象的指针(可以更改)。在Objective-C中,常量对象没有意义。编译器无法强制执行对象的常量。它无法知道方法是否改变了对象的内部状态。此外,库中的所有类总是将指向非常量对象的指针作为其方法的参数,因此使用任何常量对象指针都会导致大量警告

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

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


但在您的情况下,您可以取消
常量
。您希望稍后更改指针,使其不能是
NSString*const
。如果您坚持使用全局变量,您只需将其设置为常规的
NSString*
。另一方面,地球人是邪恶的。您应该更改您的设计,这样您就不需要它了。

我建议您重新考虑使用全局变量。也许还有更好的选择。如果您使用这些类进行并发编程,您将后悔使用全局变量。我建议您重新考虑使用全局变量。也许还有更好的选择。如果您使用这些类进行并发编程,您会后悔使用全局变量。最好使用NSString*const global,从那时起,当将指向NSString的常量指针作为参数传递给一个需要指向NSString的非常量指针的方法时,编译器不会发出警告。感谢NilObject,但我认为我遇到的问题是如何将值从数组对象分配给全局变量,可以展示一些示例您的示例使用我对全局变量声明所做的更改,但您没有保留对对象的引用,因此如果数组不存在,它可能会被破坏。最好使用NSString*const global,从那时起,当将指向NSString的常量指针作为参数传递给一个需要指向NSString的非常量指针的方法时,编译器不会发出警告。感谢NilObject,但我认为我遇到的问题是如何将值从数组对象分配给全局变量,您可以向我展示一些示例您的示例使用我对全局变量声明的更改,但是您没有保留对对象的引用,因此如果数组不存在,它可能会被销毁。