Использование постоянных объектов в target-c - PullRequest
0 голосов
/ 22 октября 2010

У меня есть код, похожий на этот:

//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 

Это должно быть выполнено так, как постоянная переменная должна быть загружена ровно один раз из файла конфигурации. Как я могу использовать константы таким образом (да, это должны быть константы, потому что, если они будут изменены, это создаст целую другую группу проблем ..)?

1 Ответ

1 голос
/ 22 октября 2010

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

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

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

...