Создание постоянного словарного объекта - PullRequest
7 голосов
/ 04 октября 2010

Я хотел бы выполнить что-то вроде того, что делается в этом посте: Константы в Objective-C

однако я хотел бы построить NSDictionary.

если я сделаю что-то вроде:

constants.h

extern NSArray *const mFooKeys;
extern NSArray *const mFooObjects;
extern NSDictionary *const mFooDictionary;

constants.m

NSArray *const mFooKeys = [[NSArray alloc] initWithObjects: 
                                   @"Foo", @"Bar", @"Baz", nil];
NSArray *const mFooObjects = [[NSArray alloc] initWithObjects: 
                                   @"1", @"2", @"3", nil];
NSDictionary *const mFooDictionary = [[NSDictionary alloc] dictionaryWithObjects:mFooObjects 
                                                                         forKeys:mFooKeys]; 

я выпускаю в dealloc и все нормально, или есть что-то еще? это более осторожный вопрос, чем вопрос «что-то не так», но я чувствую, что действительно могу все испортить, не осознавая этого.

Ответы [ 2 ]

5 голосов
/ 04 октября 2010

Чтобы иметь постоянную типа NSDictionary, основанную на других основных типах данных, необходимо либо включить ее в класс, который будет использовать эту константу, либо создать Singleton-класс и храните NSDictionary там.Есть только некоторые типы классов, которые не будут работать в реализации, на которую вы смотрите;код констант, который вы ищете, должен был бы использоваться как объект, чтобы работать правильно, но я думаю, что это побеждает цель.Мне непонятно, что является определяющим фактором для того, что вы можете и не можете делать в реализации простых констант, но я столкнулся с той же проблемой, и шаблон проектирования Singleton отлично сработал для меня.(В любом случае, вы должны dealloc надлежащим образом, даже если они будут существовать на протяжении всего жизненного цикла приложения.)

0 голосов
/ 04 октября 2010

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

Вы не хотите выпускать в dealloc, поскольку он будет освобождаться каждый раз, когда экземпляр соответствующего класса освобождается.

...