Массив примитивов c

Я хочу иметь изменяемый массив с примитивами в obj-c (селекторы). Какой рекомендуемый способ сделать это? NSArray и те могут только держать объекты.

4 ответа

Решение

Вы должны использовать NSValue обернуть селектор или любой другой примитивный тип, который вам нужен. В Какао SEL есть своего рода указатель, поэтому вы можете использовать [NSValue valueWithPointer:whatever] построить его и [value pointerValue] чтобы получить это. Или, в общем, вы можете использовать [NSValue valueWithBytes:&whatever objCType:@encode(SEL)]; это работает для любого типа.

Если вы хотите сохранить массив SEL объекты, самая простая вещь будет преобразовать SELс NSStringс помощью NSStringFromSelector() функция, хранить их в NSMutableArray, а затем преобразовать их обратно в SELS, когда вы вытаскиваете их с помощью NSSelectorFromString() функция.

Кроме управления массивом в стиле C самостоятельно (что, безусловно, не самый лучший вариант, IMO), единственным вариантом является использование NSArray/NSMutableArrayи сохраните числа, используя NSNumber, Немного раздражает получить значение, чем с фактическим числовым типом, но это освобождает вас от самостоятельного управления памятью массива.

Поскольку примитивные типы, как правило, представляют собой просто числа (будь то целые числа или числа с плавающей запятой) или указатели, в чем проблема использования классов, используемых для их обобщения в ваших целях? NSMutableArray из NSNumbers, например?

Другие вопросы по тегам