2010-10-22 33 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