2010-11-14 1 views
2

Я изучаю эту сделку и в настоящее время фокусируюсь на NSDictionary. В настоящее время я делаю примеры из книги «Начало разработки iPhone Изучение iPhone SDK» (Dave Mark/jeff LaMarche).NSDictionary, почему это

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

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

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

в файле .h:

NSDictionary * stateZips;

УРОВЕНЬ .m файл (viewDidLoad) они имеют следующий код:

NSDictionary * словарь = [[NSDictionary Alloc] initWithContentsOfFile: plistPath];
self.stateZips = словарь;
[словарь релиз];

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

+1

Вы знаете, что можете принимать ответы, верно? –

+0

Вторичный. Правильный этикет должен принимать правильные ответы. –

ответ

2

Имеет ли файл .m также инструкцию @synthesize для stateZips? Я предполагаю, что это из-за стиля выделения.

Если есть декларация собственности с сохранить и @synthesize заявление для stateZips и вы это делаете:

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

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

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

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

0

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

+0

Правильно, хотя я не вижу причины, по которой они используют установщик для этого (он ничего не помогает, просто использует производительность для поиска метода) ... – JustSid

+0

ehh как я могу принимать ответы? – PeterK

+0

Я только что научился принимать :-) – PeterK

 Смежные вопросы

  • Нет связанных вопросов^_^