Iphone 如何在运行时注册/注销协议?

Iphone 如何在运行时注册/注销协议?,iphone,objective-c,Iphone,Objective C,是否有一种正确的方法来注销视图控制器并将其注册到协议?您可以使用Objective-C运行时方法 BOOL class_addProtocol(Class cls, Protocol *protocol) 为了在运行时向类添加协议,但据我所知,您无法删除它。为了正式遵守协议: class_addProtocol([MyViewController class], @protocol(SomeProtocol)); 更动态地说: class_addProtocol(objc_getClass(

是否有一种正确的方法来注销视图控制器并将其注册到协议?

您可以使用Objective-C运行时方法

BOOL class_addProtocol(Class cls, Protocol *protocol)

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

为了正式遵守协议:

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个参数)。在本例中,请参阅以获取更多信息