2010-10-22 3 views
0

У меня есть кусок кода, похожее на это:Использование постоянных объектов в Objective-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

+0

О, да спасибо –

ответ

1

Там, скорее всего, лучший способ, но моя первая мысль назначить через дополнительный указатель косвенности, например:

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

Если бы C++, const_cast<> бы уместно, но я не уверен, как к наиболее распространенный/эквивалентный C idiom.

+0

ах, это сработало, спасибо! –