NSDictionary, почему это - PullRequest
       6

NSDictionary, почему это

2 голосов
/ 14 ноября 2010

Я изучаю эту сделку и в настоящее время сосредотачиваюсь на NSDictionary.В настоящее время я делаю примеры из книги «Начало разработки iPhone, исследуя iPhone SDK» (Дэйв Марк / Джефф Ламарш).

Пример, над которым я работаю, находится в главе 7 (стр. 166), «Панели вкладок и средства выбора».

Я хотел бы спросить, почему они используют словари так, как они делают.

Вот сценарий:

в файле .h:

NSDictionary * stateZips;

В файле .m (viewDidLoad) они имеют следующий код:

NSDictionary * dictionary = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
self.stateZips = словарь;
[выпуск словаря];

Мой вопрос заключается в том, есть ли какая-либо конкретная причина Objective C, почему они копируют словарь в stateZips, а неиспользовать stateZips для инициализации из списка, чтобы избежать лишнего кода?... или, если это просто способ, которым пишут сами писатели?

Ответы [ 2 ]

2 голосов
/ 14 ноября 2010

Есть ли в файле .m оператор @synthesize для stateZips? Я предполагаю, что из-за стиля распределения.

Если есть объявление свойства с сохранением и оператор @synthesize для stateZips, и вы делаете это:

self.stateZips = [[NSDictionary alloc] initWithContentsOfFile:plistPath];

У вас будет утечка памяти. Словарь, созданный в приведенном выше утверждении, будет иметь счет 2 после оператора. Одно сохранение для alloc, а другое сохранение выполняется синтезированным установщиком.

Это побочный эффект от использования сеттеров, которые содержат операторы retain, но если вы не используете сеттеры с операторами retain, у вас, вероятно, будут гораздо большие проблемы с управлением памятью ...; -)

Чтобы лучше понять эти вещи, вы должны изучить использование @ property для назначения и сохранения, а также кода для синтезированных сеттеров и геттеров.

0 голосов
/ 14 ноября 2010

потому что я думаю, что stateZips - это свойство, которое сохраняет.Поэтому, когда они выделяют словарь / initWithContentsOfFile, им необходимо освободить его, поскольку self.stateZips уже сохраняет его.

...