Я часто сталкиваюсь с выбором дизайна и немного борюсь; Я ищу другие перспективы.
Я часто хочу вести списки или передавать куски состояния, которые в основном являются просто наборами значений. Значения имеют тенденцию быть примитивными типами: float, NSTimeIntervals, CGPoints и т. Д.
Я часто склоняюсь к созданию структур C для этих наборов свойств, например
typedef struct _STATE {
float foo;
NSTimeInterval elapsed;
CGPoint point;
} STATE;
и т.д.
Но структуры C плохо работают с собственными классами коллекции Какао (NSArray
, NSSet
, NSDictionary
), и использование их множества для отслеживания большого количества состояний ощущается так, как будто оно работает против зерна отдыха моего кода, дружественного к Какао - я в конечном итоге получаю и непосредственно управляю массивами структур и передаю указатели структур в сообщениях и т. д.
С другой стороны, поскольку необработанная производительность не обязательно критична, я мог бы закодировать эти значения в NSDictionary, обернув их все в NSValue
или NSNumber
, но результирующий синтаксис вряд ли краток и немного хрупок , требующие правильности типа и имени во время выполнения как для вставки, так и для поиска:
[stateDict setObject:[NSNumber numberWithFloat:foo] forKey:@"bar"];
...
float something = [[stateDict objectForKey:@"bar"] floatValue];
и некоторые типы, такие как NSTimeInterval, могут использоваться только с некоторыми (спорными) хакерами (в этом случае приведение к типу удваивается).
Наконец, я мог бы создавать объекты-контейнеры только для данных с закрытыми данными-членами и только получателями / установщиками. (В Java они называются «bean-компонентами».) Они более лаконичны для доступа, чем словари, больше какао, чем структуры, но мне кажется излишним, особенно если они нужны мне только как «внутренние классы», которые используются для управления состоянием внутренний для одного типа объекта.
Как вы, великие программисты Cocoa, делаете это?