Введите приведение из метода в SEL - PullRequest
4 голосов
/ 08 ноября 2011

Я использую библиотеку времени выполнения Objective C, функцию class_copyMethodList (), чтобы получить список всех методов в моем классе.Как мне затем преобразовать эти объекты типа Method в пригодные для использования объекты типа SEL?

Ответы [ 3 ]

5 голосов
/ 08 ноября 2011

Запустить функцию method_getName() на возвращенных объектах Method.

3 голосов
/ 08 ноября 2011

Я сделал это пару лет назад, чтобы извлечь все имена методов класса. Вы можете использовать NSSelectorFromString (), чтобы получить SEL от каждого имени.

+ (NSArray *) methodNamesForClass:(Class) aClass
{
    Method *methods;
    unsigned int methodCount;
    if (methods = class_copyMethodList(aClass, &methodCount))
    {
        NSMutableArray *results = [NSMutableArray arrayWithCapacity:methodCount];
        while (methodCount--) 
            [results addObject:[NSString stringWithCString: sel_getName(method_getName(methods[methodCount])) 
                                                  encoding: NSASCIIStringEncoding]];
        free(methods);  
        return results;
    }

    return nil;
}
0 голосов
/ 08 ноября 2011

Если у вас есть имя метода, вы можете преобразовать его в селектор, используя функцию NSSelectorFromString.

SEL fooSelector = NSSelectorFromString ( @"foo:" ) ; 

Apple обсуждает это в своем Objective C tutorial .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...