Я не знаком с class_addMethod, но, возможно, это поможет вам уточнить:
Помните, что в Objective-C вы не "вызываете метод", но фактически отправляете сообщение.Так что это безопасно сделать: [anyObject anyMethodName] для любого экземпляра объекта.Этот объект может или не может ответить на сообщение.
Вы можете проверить, будет ли объект или нет, с помощью [anyObject responsedsToSelector: @selector (@ "anyMethodName")], и если это ДА, то перейдитевперед и сделайте вызов [anyObject anyMethodName].Я не могу полностью понять ваше описание проблемы, но похоже, что у вас есть гетерогенный контейнер, полный объектов, которые могут или не могут ответить на вызов.Выполнение этого «responsedsToSelector:» проверка на каждом объекте в контейнере является абсолютно обычной вещью в Objective-C и звучит как хороший дизайн
Если каждый объект возвращает какой-либо другой тип данных, вы можете обработать это, используя 'id 'универсальный тип.То есть id returnData = [anyObject anyMethodName];Затем вы можете либо использовать интроспекцию для returnData, либо вы можете обрабатывать вещи по-разному в зависимости от того, что представляет собой класс anyObject, что проверяется [anyObject class];
Так вот,
if([anyObject class] == MyGreatClass) // recast data to MyGreatClassCoolReturnType
Надеюсь, это поможет ответить на вопрос