Вы можете использовать тип SEL
для удержания селекторов. Просто:
SEL dispatchTable[3] = { @selector(doThis:),
@selector(doThat:),
@selector(doTheOther:)
};
Для редактирования используйте взамен NSArray
/ NSDictionary
/ etc в качестве вашей собственности. Вы не можете использовать массивы C в качестве свойств в Objective C; они не являются одним из поддерживаемых типов (которые являются объектами ObjC, типами CF и базовыми типами C 'Plain Old Data'.)
ОК, в наших комментариях ниже вам нужно обернуть селектор в NSValue
, чтобы позволить вам использовать его в контейнере objc (потому что SEL
- это тип указателя C):
NSMutableArray * dispatchTable2 = [[NSMutableArray alloc] initWithCapacity:3];
SEL selIn = @selector(doThis:);
// Wrap the selector in an NSValue instance
[dispatchTable2 addObject:[NSValue valueWithPointer:selIn]];
// On extracting:
NSValue * valOut = [dispatchTable2 objectAtIndex:0];
SEL selOut = [[dispatchTable2 objectAtIndex:0] pointerValue];
[anObject performSelector:selOut];
Итак, теперь ваша таблица является контейнером objc, хранящимся как свойство или ivar, и вы используете NSValue
, чтобы обернуть SEL
указатели с valueWithPointer:
и получить SEL
с pointerValue
.