2014-12-30 2 views
-2

Я хочу, чтобы получить что-то вроде:Как создать экземпляр класса object-c по имени?

#define weaken(object) ... 

---- 

ClassABCD * abcd = [ClassABCD new]; 
weaken(abcd); 
weakAbcd.tag = 0; 

---- 

У меня есть код ниже:

#define weaken(x) __weak typeof(x) weak##x = x 

Но можно использовать только "weakabcd", а не "weakAbcd". Любая идея, почему и как ее исправить?

+0

Вы пытаетесь создать экземпляр некоторого класса, передав строку? Вот почему я интерпретирую строку темы – Chris

+0

Я пробовал, но не смог. Итак, я пришел сюда, чтобы спросить –

+0

Я не знаю, можете ли вы делать то, что хотите (макрос, который заглаживает первую букву перед ее префиксом 'слабый'), но вы всегда можете рассмотреть другую реализацию, макрос' weakify': http://stackoverflow.com/a/27280374/1271826 – Rob

ответ

0

Основываясь на заголовке вопроса, NSClassFromString() сделает это. Основываясь на коде, который вы предлагаете, я не уверен, что оба матча.

Это строка из одного из моих проектов, где я создаю экземпляр подкласса UITableViewCell на основе строковой переменной prefCellClassName, которую я определяю в другом месте. (Для полноты prefCellStyle и prefCellReuseIdentifier также переменные, которые я определяю в другом месте.)

 cell = [[NSClassFromString(prefCellClassName) alloc] initWithStyle:prefCellStyle reuseIdentifier:prefCellReuseIdentifier]; 
0

Чтобы сделать класс из строки:

id someObject = NSClassFromString("MyClassName"); 

Когда вы делаете что-то подобное, это всегда хорошо, чтобы проверить если ваш объект отвечает на метод, который вы пытаетесь передать его следующим образом:

if ([someObject respondsToSelector:@selector(someMethod)]) 
{ 
    [someObject someMethod]; 
} 

особенности это так, что делает цель-с динамическим языком, что это

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