2009-10-08 3 views

ответ

7

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

+0

Спасибо, я не знал о NSValue. – quano

0

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

+0

На самом деле, я хочу хранить SEL. Какой тип, действительно? – quano

0

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

6

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

+0

Хм, я полагаю, это сработает. Благодарю. – quano

Смежные вопросы