我的问题可能看起来很奇怪,但是我想了解 Stackers 的想法,在我的工作中,我只是注意到每个协议始终都符合一个类,我想知道是否有可能使一个简单的对象也符合协议,如果不是(而且几乎不是),为什么不呢?
感谢您的关心
我的问题可能看起来很奇怪,但是我想了解 Stackers 的想法,在我的工作中,我只是注意到每个协议始终都符合一个类,我想知道是否有可能使一个简单的对象也符合协议,如果不是(而且几乎不是),为什么不呢?
感谢您的关心
协议一致性有两个部分:
YES
当被问及是否符合协议时,该对象必须返回那么,我们可以安排一个NSObject
满足这两个条件的实例吗?是的。事实上,至少有两种方法可以做到这一点。首先,让我们让所有的实例都NSObject
符合协议。我们所做的是在一个类别中定义协议方法NSObject
,这解决了第一部分。然后我们“swizzle”(这意味着使用class_replaceMethod()
运行时函数)-[NSObject conformsToProtocol:]
,返回YES
我们感兴趣的协议。
现在让我们假设您要使特定的实例NSObject
符合协议。这稍微容易一些。首先,创建一个NSObject
符合协议并实现所需方法的子类;无需重写-conformsToProtocol:
,因为运行时库可以看到此类符合。现在,在运行时,获取您的NSObject
实例并调用object_setClass()
以将其类切换到符合您要求的子类。
您可以使用 runtime 函数在运行时向类添加协议class_addProtocol()
。但是,当类没有实现协议的所有方法时这样做可能会导致不好的结果。