Как правильно управлять памятью переменной / метода класса в задаче c? - PullRequest
2 голосов
/ 01 июня 2009

Я изучаю Цель - C и пришел из мира, где собирают мусор. Я создаю переменную класса (статическую) из словаря, и я не уверен, правильно ли я делаю это для управления памятью или нет. Я использую удобный метод, поэтому объект должен автоматически освобождаться, но я не знаю, нужно ли мне выпускать или сохранять его в моем классе.

Я не могу найти четкую документацию по управлению объектами уровня класса - любой совет приветствуется. Спасибо.

+(NSDictionary*) polygonNames{        
        NSDictionary* polygonNames = [NSDictionary dictionaryWithObjectsAndKeys:
                                      @"Triangle", @"3",
                                      @"Square", @"4",
                                      @"Square", @"4",
                                      @"Pentagon", @"5",
                                      @"Hexagon", @"6",
                                      @"Heptagon", @"7",
                                      @"Octagon", @"8",
                                      @"Nonagon", @"9",
                                      @"Decagon", @"10",
                                      @"Hendecagon", @"11",
                                      @"Dodecagon", @"12",
                                      nil];
        return polygonNames;

    }

Ответы [ 2 ]

3 голосов
/ 01 июня 2009

Если ваша структура данных неизменна и не собирается изменяться, вы можете использовать статическую переменную, например:

+ (NSDictionary *) polygonNames
{
    static NSDictionary *polygonNames = nil;
    if (!polygonNames) polygonNames = [[NSDictionary alloc] initWithObjectsAndKeys:/* objects and keys */];
    return polygonNames;
}
2 голосов
/ 01 июня 2009

Могу порекомендовать сайт CocoaDev.com. На котором вы найдете следующее правило:

  • Если вы распределяете, сохраняете или копируете его, ваша задача - освободить его. В противном случае это не так.
  • Если вы распределяете, сохраняете или копируете его, ваша задача - освободить его. В противном случае это не так. Да, прочитайте это снова!

Поиск по "правилам большого пальца". Поскольку я не могу добавлять гиперссылки ..

В основном все методы класса с именами dictionary*, array* и т. Д. Возвращают автоматически освобожденный объект, который вам не нужно сохранять / освобождать.

Для дальнейшего чтения я могу порекомендовать страницу «Управление памятью».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...