Способ добавления протокола во время выполнения
Protocol *aProtocol = objc_allocateProtocol("TestingRuntimeDelegate");
AppDelegate *appInstance = (AppDelegate*)[[UIApplication sharedApplication] delegate];
NSLog(@"conformed Protocol ..%d",class_conformsToProtocol([self.delegate class], aProtocol));
protocol_addMethodDescription(aProtocol, @selector(itIsTestDelegate), "test", NO, NO);
objc_registerProtocol(aProtocol);
class_addProtocol([appInstance class], aProtocol);
//NSLog(@"adding Protocol %d",class_addProtocol([appInstance class], aProtocol));
if ([self.delegate conformsToProtocol:@protocol(TestDelegate)])
{
NSLog(@"conformed Protocol ..");
}
else
{
NSLog(@"conformed Protocol ..%d",class_conformsToProtocol([appInstance class], aProtocol));
class_conformsToProtocol([self.delegate class], aProtocol);
[appInstance performSelector:@selector(itIsTestDelegate)];
}
Но метод делегата должен быть предварительно определен в этом классе, иначе он потерпит крах из-за нераспознанного селектора
или метод может быть добавлен во время выполнения.
Тогда все будет работать нормально ..
Но следующий файл должен быть импортирован первым.
#include <objc/runtime.h>