2011-08-17 63 views
3

我已经尝试了很多次来理解const关键字,但它对我而言并不适用。因此,初始化const对象时非常丢失

我想声明一个不能改变的对象,也就是说,一个常量对象。例如,在.h文件:

extern MyClass *use_this_object; 

,并在.m文件:

MyClass *use_this_object; 

+ (void) Initialize { 
    use_this_object = [MyClass new]; 
} 

现在,我在哪里可以把一个常量,使其他类可以访问use_this_object但不能修改它(假设MyClass是不可变的),而MyClass类可以初始化变量?

这甚至可能吗?或者我应该使用静态方法来检索常量而不是声明它是外部的?

+0

嗯,我认为它也可能适用于C,因为它们在很多方面都很相似。但显然不是在这种情况下。 –

回答

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最接近的方式,因为程序的其他部分无法直接访问指针。

+0

加一个“你从右到左读这些东西。” – Feroz

2

我会使用静态方法,似乎更简单。