我已多次尝试了解const关键字,但它对我来说无效。
我想声明一个无法更改的对象,也就是说,一个常量对象。例如,在.h文件中:
extern MyClass *use_this_object;
并在.m文件中:
MyClass *use_this_object;
+ (void) Initialize {
use_this_object = [MyClass new];
}
现在,我在哪里可以放置一个const,以便其他类可以访问use_this_object
但不能修改它(假设MyClass
是不可变的),而MyClass
类可以初始化变量?
这甚至可能吗?或者我应该使用静态方法来检索常量而不是将其声明为extern?
答案 0 :(得分:8)
Objective-C中没有“const对象”这样的东西。有const 指针,并且有不可变对象。您正在谈论的是指向不可变对象的const指针,但您无法在运行时分配这些指针。
对于可以在编译时分配的对象(我只知道一个NSString
),你可以这样做:
NSString * const kMyString = @"string";
这是一个指向(不可变)NSString
的常量指针。你从右到左阅读这些东西。
要创建您想要的内容,您需要一个内部static
的函数或方法,如下所示:
+ (Something *)something {
static Something *something = nil;
if (! something) {
something = [Something new];
}
return something;
}
除了真正的常量(如字符串和整数)之外,最好还使用全局变量。
由您决定Something
是不可变的。
编辑只是关于上述代码的说明。这只是如何在运行时创建静态对象的示例。有很多方法可以通过各种权衡来实现,包括使用+initialize
和静态文件(目前我最喜欢创建单例的方法)。不要将上述代码作为一个唯一的方式。它只是最接近const
的方式,因为程序的其他部分不能直接指向指针。
答案 1 :(得分:2)
我使用静态方法,看起来更简单。