如何在运行时注册/取消注册协议?

时间:2012-12-17 00:33:24

标签: iphone objective-c

是否有正确的方法来取消注册并将视图控制器注册到协议?

2 个答案:

答案 0 :(得分:4)

正式遵守协议:

class_addProtocol([MyViewController class], @protocol(SomeProtocol));

更动态:

class_addProtocol(objc_getClass("MyViewController"), objc_getProtocol("SomeProtocol"));

实际将方法实现添加到类:

// - (int)someMethod:(int)arg;
int someMethod(id self, SEL _cmd, int arg)
{
    return arg * 2;
}

class_addMethod([MyViewController class], @selector(someMethod:), (IMP)someMethod, "i@:i");

在这种情况下,请注意方法签名(class_addMethod()的第4个参数),有关详细信息,请参阅documentation

答案 1 :(得分:1)

您可以使用Objective-C Runtime方法

BOOL class_addProtocol(Class cls, Protocol *protocol)

为了在运行时向类中添加协议,但据我所知,你无法删除它。