массив примитивов c - PullRequest
       14

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

2 голосов
/ 09 октября 2009

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

Ответы [ 4 ]

7 голосов
/ 09 октября 2009

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

6 голосов
/ 09 октября 2009

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

0 голосов
/ 09 октября 2009

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

0 голосов
/ 09 октября 2009

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

...