Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top