2010-10-22 58 views
0

常量对象我具有类似于此的一段代码:使用在目标c

//Foo.h 
OBJC_EXPORT MyObject *const myObj; 

// Foo.m 
MyObject *const myObj; 

@implementation Foo 

+(void) initialize 
{ 
    if (self = [Graph class]) 
    { 
      myObj = [Config get:@"Foo"]; // <--- ERROR! assignment of read-only variable 'Foo' 

      // .... 
    } 
} 

// .... 

@end 

这需要这样来实现,作为常数变量必须从一个配置文件正好一次加载。我怎样才能以这种方式使用常量(是的,它需要是常量,因为如果它改变了,它会呈现另一组问题。)?

+0

这里有错字吗? 'Foo'是类变量,所以问题行应该读取'myObj ='而不是'Foo ='? – bosmacs 2010-10-22 17:26:15

+0

哦,是的,谢谢 – 2010-10-22 17:28:22

回答

1

有可能是一个更好的办法,但我首先想到的是通过一个额外的间接指针分配给它,如:

MyObject** nonConstObj = (MyObject**)&myObj; 
*nonConstObj = [Config get:@"Foo"]; 

如果是C++,const_cast<>将是适当的,但我不能确定的最常见/相当的C成语。

+0

啊,这个工作,谢谢! – 2010-10-22 20:12:40