Мне нравится, что вы задали этот вопрос;слишком часто я вижу заявление о набухании сатаны .Приятно видеть, что кто-то хочет вместо этого использовать таблицу функций.
Если вы согласны с использованием файла списка свойств (который обычно кодируется в XML), это действительно просто.
Просто создайте список свойств, где корневым элементом является словарь, который сопоставляет некоторые ключи с некоторыми селекторами.
Key Type Value
----------------------------------------------
Root Dictionary
firstKey String someSelector
secondKey String anotherSelector
Загрузите содержимое списка свойств в NSDictionary
:
id path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"plist"];
id dict = [NSDictionary dictionaryWithContentsOfFile:path];
SEL selector = NSSelectorFromString([dict objectForKey:@"firstKey"]);
if ([someObject respondsToSelector:selector]) {
[someObject performSelector:selector];
}
Конечно, вы захотите преобразовать эту логику в соответствующий метод и, возможно, кэшировать список свойств как переменную экземпляра.
Примечание: лично я считаю, что лучше просто поместитьэта таблица функций встроена;списки свойств это круто, но я не уверен, что это очень полезно в этом случае.Кроме того, если вы хорошо владеете Objective-C ++, std::map
позволит вам избежать неупаковки и разворачивания селекторов в NSString
объектах и т. Д.